std::shared_future<T>::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::shared_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
См. также
| ожидает, пока результат станет доступен (открытая функция-член) |
|
| ожидает результат и возвращает управление, если он не стал доступен до наступления указанного момента времени (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/shared_future/wait_for