深入应用C++11 笔记—异步操作 (九)
异步操作
C++11 提供了异步操作相关的类:
* std::future 作为异步结果的传输通道,用于获取线程函数的的返回值;
* std::promise用于包装一个值,将数据和future绑定起来,方便线程赋值;
* std::package_task将函数和future绑定起来,以便异步调用。
1.1 获取线程函数返回值的类std::future
thread库提供了future用来访问异步操作的结果,因为一个异步操作的结果不能马上获取,只能在未来某个时候从某个地方获取,这个异步操作的结果是一个未来的期待值,所以被称为future,future提供了获取异步操作结果的通道。可以以同步等待的方式获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。future_status有如下3种状态:
- Deferred:异步操作还没开始
- Ready:异步操作已经完成
- Timeout:异步操作超时
我们可以查询future状态,通过它内部的状态可以知道异步任务的执行情况:
//查询future的状态
std::future_status status;
do{
status=future.wait_for(std::chrono::seconds(1));
if(status==std::future_status::deferred){}
else if(status==std::future_status::timeout){}
else if(status==std::future_status::ready){}
}while(status!=std::future_status::ready);<