std::future<T>:: wait_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
future::wait_for
|
||||
|
template
<
class
Rep,
class
Period
>
std:: future_status wait_for ( const std:: chrono :: duration < Rep,Period > & timeout_duration ) const ; |
(C++11 起) | |
等待结果变为可用状态。阻塞直到指定的 timeout_duration 时间间隔结束或结果变为可用(以先发生者为准)。返回值用于标识结果的状态。
如果该 future 是通过采用延迟求值方式的 std::async 调用所获得的结果,则此函数会立即返回而无需等待。
该函数可能因调度或资源竞争延迟而阻塞超过 timeout_duration 时长。
标准建议使用稳定时钟来测量持续时间。如果实现使用系统时钟替代,等待时间也可能对时钟调整敏感。
若在调用此函数前 valid() 为 false ,则行为未定义。
目录 |
参数
| timeout_duration | - | 阻塞等待的最长持续时间 |
返回值
| 常量 | 说明 |
| future_status::deferred | 共享状态包含使用延迟求值的延迟函数,因此结果仅在显式请求时计算 |
| future_status::ready | 结果已就绪 |
| future_status::timeout | 已超时 |
异常
任何在时钟、时间点或持续时间执行期间抛出的异常(标准库提供的时钟、时间点和持续时间从不抛出异常)。
注释
实现被鼓励在调用前检测 valid == false 的情况,并抛出带有错误条件 std::future_error 的 std::future_errc::no_state 异常。
示例
#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'; }
可能的输出:
waiting... timeout timeout timeout ready! result is 8
参阅
|
等待结果变为可用
(公开成员函数) |
|
|
等待结果,若在到达指定时间点后结果仍不可用则返回
(公开成员函数) |