1.std::future
std::future是一个模板类,可以从异步任务中获取结果。将future对象与async,packaged_task对象进行绑定,调用get()函数来获取结果。
2 .std::async
std::async 是c++11提供的一个创建异步任务的模板类,比thread类的功能更加全面。
async的三种启动策略
(一)用std::launch::async启动
#include<thread>
#include<stdio.h>
#include<future>
using namespace std;
int fun()
{
printf("%d\n", this_thread::get_id());
return 1;
}
int main()
{
printf("%d\n", this_thread::get_id());
future<int>fu = async(launch::async, fun);
int res = fu.get();
printf("%d", res);
}
输出结果:
22436
10444
1
使用std::launch::async来创建async任务,会立即创建一个新线程。并且,当与之绑定的future对象调用get()函数时,如果任务没有执行完毕,线程将阻塞,直到任务完毕。
(二)用std::launch::deferred启动
#include<thread>