std::cout<<"value:"<< x <<'\n'; }intmain () { std::promise<int> prom;//create promisestd::future<int> fut = prom.get_future();//engagement with futurestd::thread th1 (print_int, std::ref(fut));//send future to new threadprom.set_value (10);//fulfill promise//(synchroniz...
std::promise<int> pr; std::thread t([](std::promise<int>& p){ p.set_value_at_thread_exit(9); },std::ref(pr)); std::future<int> f = pr.get_future(); auto r = f.get(); std::packaged_task std::packaged_task它包装了一个可调用的目标(如function, lambda expression, bind e...
std::packaged_task 对象内部包含了两个最基本元素:一、被包装的任务(stored task),任务(task)是一个可调用的对象,如函数指针、成员函数指针或者函数对象;二、共享状态(shared state),用于保存任务的返回值,可以通过 std::future 对象来达到异步访问共享状态的效果。 #include<stdio.h>#include<stdlib.h>#include...
如果线程 1 想要获取数据,而线程 2 未给出数据,则线程 1 阻塞,直到线程 2 的数据到达 #include<iostream>#include<iomanip>#include<string>#include<random>#include<any>#include<functional>#include<future>#include<thread>#include<chrono>#include<cstdlib>voidSetPromise(std::promise<int>&promiseObj){std...
{20inttmp =12;21cout <<"main"<<"threadid ="<< std::this_thread::get_id() <<endl;22std::packaged_task<int(int)> mypt(mythread);//我们把函数mythread通过packaged_task包装起来23std::thread t1(std::ref(mypt),1);24t1.join();25std::future<int> result =mypt.get_future();26//...
首先创建一个promise,通过promise可以拿到future,future有wait()和get()等方法,这种方法会阻塞当前线程...
{cout<<"Main thread start "<<"threadId="<<std::this_thread::get_id()<<endl;std::packaged_task<int(int)>mypt(mythread);std::threadt1(std::ref(mypt),1);t1.join();std::future<int>res=mypt.get_future();cout<<"Thread Output: "<<res.get()<<endl;cout<<"Main thread end "<<...
(5));returnx;}intmain(){std::packaged_task<int(int)>pt(fun);// 将函数打包起来std::future<int>fu=pt.get_future();// 并将结果返回给futurestd::threadt(std::ref(pt),1);std::cout<<fu.get()<<std::endl;std::cout<<std::this_thread::get_id()<<std::endl;t.join();return0;...
std::thread t1(std::ref(task)); std::future<int> f1 = task.get_future(); auto r1 = f1.get(); std::promise、std::packaged_task和std::future的关系 至此, 我们介绍了std::async相关的几个对象std::future、std::promise和std::packaged_task,其中std::promise和std::packaged_task的结果最终...
{ int sum = a + b; // 设置值 promise.set_value(sum); } int main() { std::promise<int> promise; std::future<int> result = promise.get_future(); // 启动异步任务 std::thread thread(calculateSum, std::ref(promise), 2, 3);//这里用std::async也是一样的,但这里我们不需要获取...