C++11之std::async
std::future<T> async(launch __policy, _Fn&& __fn, _Args&&... __args)是一个接受回调(函数或函数对象)作为参数的函数模板,并有可能异步执行它们。返回一个std::future<T>,它存储由std::async()执行的函数对象返回的值。
参数介绍
参数1: launch 启动策略有三种选择
一、std::launch::async 保证异步行为,执行后,系统创建一个线程执行对应的函数
二、std::launch::deffered 当其他线程调用get()来访问共享状态时,将调用非异步行为
三、std::launch::async||std::launch::deffered 默认策略,由系统决定怎么调用
参数2,3分别为函数指针(函数指针·函数对象·lambda表达式),函数参数列表。
例1.
默认策略其中wait get 函数都有等待异步线程结束的意思 但是get可以拿到返回的结果,如果不写wait 或者get 那么程序是没有输出的。(为什么没有输出是因为系统默认选择了defferd策略,所以没有等待这两个线程结束)
例2.
异步策略对于异步策略,不需要wait 或者 get 来等线程结束,异步策略会等待线程结束。
例3.
延迟策略延迟策略就必须使用 wait 或者 get 来等待线程结束了。
返回结果std::future
它提供了一种访问异步操作结果的机制。我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。
future_status有三种状态:
deferred:异步操作还没开始
ready:异步操作已经完成
timeout:异步操作超时
future_status实例结果(横着写了,节省空间)timeout timeout timeout timeout timeout timeout timeout timeout timeout deferred1 ready
std::async是更高层次上的异步操作,我们不需要关注创建线程的细节,就可以方便的获得结果,线程状态。