future
- std::future 类型模板是为了等待其他线程上的异步结果,其和 std::promise,std::packaged_task类型模板,还有std::async函数模板,都是为异步结果准备的工具。std::shared_future实例可以引用同一个异步结果。
- std::packaged_task 类型模板可打包一个函数或其他可调用对象,所以当函数通过 std::packaged_task实例被调用时,结果将会作为异步结果。这个结果可以通过检索 std::future 实例来查找。
- std::promise 类型模板提供设置异步结果的方法,这样其他线程就可以通过 std::future 实例来索引该结果。
例子
promise
函数的返回值被保存在promise变量里面,需要的时候可以拿出来用。
std::promise<int> pr;
std::thread t([](std::promise<int> &pr){
pr.set_value_at_thread_exit(11);
},std::ref(pr));
auto fut = pr.get_future();
std::cout<<fut.get()<<std::endl;
packaged_task
将函数保存在packaged_task里面,函数的返回结果可以在需要的时候取出来用.
std::packaged_task<int()> task([](){return 2;});
std::thread t1(std::ref(task));
std::cout<<task.get_future().get()<<std::endl;
最终都是转化成std::future变量,从此中取出函数运行的结果。