C++2.0C++从入门到放弃CPP学习

C++11之std::async

2019-01-04  本文已影响23人  lixin_karl

        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是更高层次上的异步操作,我们不需要关注创建线程的细节,就可以方便的获得结果,线程状态。

上一篇下一篇

猜你喜欢

热点阅读