50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#include <iostream>
|
|
#include <thread>
|
|
#include <future>
|
|
using namespace std;
|
|
|
|
void test1() {
|
|
promise<int> p;
|
|
future<int> f = p.get_future();
|
|
thread t1([&]() {
|
|
this_thread::sleep_for(chrono::milliseconds(1000));
|
|
p.set_value(12);
|
|
this_thread::sleep_for(chrono::milliseconds(1000));
|
|
});
|
|
t1.detach();
|
|
std::cout << "test1:: res:: " << f.get() << endl;
|
|
}
|
|
void test2() {
|
|
promise<int> p;
|
|
future<int> f = p.get_future();
|
|
shared_future<int> sf = f.share();
|
|
thread t1([&]() {
|
|
this_thread::sleep_for(chrono::milliseconds(1000));
|
|
p.set_value(12);
|
|
this_thread::sleep_for(chrono::milliseconds(1000));
|
|
});
|
|
t1.detach();
|
|
std::cout << "test2:: res:: " << sf.get() << sf .get() << endl;
|
|
}
|
|
void test3() {
|
|
auto fn = []()->int {
|
|
this_thread::sleep_for(chrono::milliseconds(1000));
|
|
return 12;
|
|
};
|
|
auto f = async(launch::async, fn);
|
|
packaged_task<int()> t(fn);
|
|
t();
|
|
|
|
std::cout << "test3:: res:: " << f.get() << t.get_future().get() << endl;
|
|
}
|
|
int main() {
|
|
test1();
|
|
test2();
|
|
test3();
|
|
//这里通过条件变量 | 信号量 + 共享变量就能实现
|
|
//用promise-future 感觉很浪费
|
|
std::cout << "promise size:: " << sizeof(promise<int>) <<
|
|
" future size:: " << sizeof(future<int>) <<
|
|
" shared_future size:: " << sizeof(shared_future<int>) << endl;
|
|
return 1;
|
|
} |