std::shared_future<T>::wait_for
< cpp | thread | shared future
template< class Rep, class Period > std::future_status wait_for( const std::chrono::duration<Rep,Period>& timeout_duration ) const; |
(C++11 起) | |
等待结果变得可用。阻塞直至经过指定的 timeout_duration
,或结果变为可用,两者的先到来者。返回值鉴别结果的状态。
此函数可能由于调度或资源争议延迟而阻塞长于 timeout_duration
。
推荐标准库用稳定时钟度量时长。若实现用系统时钟代替,则等待时间可能也对时钟调整敏感。
若调用此函数前 valid()== false 则行为未定义。
参数
timeout_duration | - | 要阻塞的最大时长 |
返回值
常量 | 解释 |
future_status::deferred | 要计算结果的函数仍未启动 |
future_status::ready | 结果就绪 |
future_status::timeout | 已经过时限 |
异常
时钟、时间点或时长在执行中可能抛的任何异常(标准库提供的时钟、时间点和时长决不抛出)。
注意
鼓励实现在调用前检测 valid == false 的情况并抛出以 future_errc::no_state 为 error_condition 的 future_error 。
示例
运行此代码
#include <iostream> #include <future> #include <thread> #include <chrono> int main() { std::shared_future<int> future = std::async(std::launch::async, [](){ std::this_thread::sleep_for(std::chrono::seconds(3)); return 8; }); std::cout << "waiting...\n"; std::future_status status; do { status = future.wait_for(std::chrono::seconds(1)); if (status == std::future_status::deferred) { std::cout << "deferred\n"; } else if (status == std::future_status::timeout) { std::cout << "timeout\n"; } else if (status == std::future_status::ready) { std::cout << "ready!\n"; } } while (status != std::future_status::ready); std::cout << "result is " << future.get() << '\n'; }
可能的输出:
waiting... timeout timeout ready! result is 8
参阅
等待结果变得可用 (公开成员函数) | |
等待结果,如果在已经到达指定的时间点时仍然无法得到结果,则返回。 (公开成员函数) |