std::shared_future<T>::wait_for
来自cppreference.com
< 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,或结果变为可用,两者先达成者为止。返回值鉴别结果的状态。
如果此未来体是使用惰性求值调用 std::async 的结果,则此函数立即返回而不会等待。
此函数可能由于调度或资源争议延迟而阻塞长于 timeout_duration。
标准推荐使用稳定时钟度量时长。若实现用系统时钟代替,则等待时间可能也对时钟调整敏感。
若调用此函数前 valid() 为 Template:false 则行为未定义。
参数
timeout_duration | - | 要阻塞的最大时长 |
返回值
常量 | 解释 |
future_status::deferred | 共享状态包含一个使用惰性求值的延迟函数,仅在明确请求时才计算其结果 |
future_status::ready | 共享状态已就绪 |
future_status::timeout | 已超过时限 |
异常
时钟、时间点或时长在执行中可能抛的任何异常(标准库提供的时钟、时间点和时长决不抛出)。
注解
鼓励实现在调用前检测 valid == false 的情况并抛出以 future_errc::no_state 为错误条件的 future_error。
示例
运行此代码
#include <chrono> #include <future> #include <iostream> #include <thread> using namespace std::chrono_literals; int main() { std::shared_future<int> future = std::async(std::launch::async, []() { std::this_thread::sleep_for(3s); return 8; }); std::cout << "等待...\n"; std::future_status status; do { switch (status = future.wait_for(1s); status) { case std::future_status::deferred: std::cout << "延后\n"; break; case std::future_status::timeout: std::cout << "超时\n"; break; case std::future_status::ready: std::cout << "就绪!\n"; break; } } while (status != std::future_status::ready); std::cout << "结果为 " << future.get() << '\n'; }
可能的输出:
等待... 超时 超时 就绪! 结果为 8
参阅
等待结果变得可用 (公开成员函数) | |
等待结果,如果在已经到达指定的时间点时仍然无法得到结果,则返回。 (公开成员函数) |