1 详解std::future
1.1 std::future
类模板std::future
提供了一种访问异步操作结果的机制,这种异步操作可以是std::promise
、std::packaged
、std::async
。
std::future
这个名字起得就很有意思,字面上future
就是未来的意思,而std::future
表示在未来某个时间点(而不是立刻、马上、现在)获取异步操作的结果。
函数原型
template< class T > class future;
template< class T > class future<T&>;
template<> class future<void>;
1.2 获取std::future的成员函数
1.2.1 get
std::future
的成员函数get
函数用于获取异步操作的结果,它可以等待直到std::future
获得有效结果并返回。
1.2.2 valid
std::future
的成员函数valid
函数用于检查future
是否处于共享状态,在std::future
没有调用get
方法之前都是为true,如果调用了get
方法则返回false。
1.2.3 wait
std::future
的成员函数wait
函数用于阻塞当前线程直到std::future
的结果可用。
1.2.4 wait_for和wait_util
wait_for
:阻塞指定时间段等待结果可用wait_util
:阻塞到某个时间点等待结果可用
wait_for
和wait_util
都返回以下返回值用于表示std::future
的状态:
std::future_status::deferred
:异步操作还没有开始std::future_status::ready
:异步操作已经完成std::future_status::timeout
:异步操作超时
具体查询示例代码如下:
#include <chrono>
#include <future>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;
int main()
{
std::future<int> future = std::async(std::launch::async, []()
{
std::this_thread::sleep_for(3s);
return 8;
});
std::cout << "waiting...\n";
std::future_status status;
do
{
switch (status = future.wait_for(1s); status)
{
case std::future_status::deferred:
std::cout << "deferred\n";
break;
case std::future_status::timeout:
std::cout << "timeout\n";
break;
case std::future_status::ready:
std::cout << "ready!\n";
break;
}
}
while (status != std::future_status::ready);
std::cout << "result is " << future.get() << '\n';
}
参考
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – 详解std::future
原文链接:https://www.stubbornhuang.com/2951/
发布于:2024年01月12日 13:45:02
修改于:2024年01月12日 13:45:02
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52