std::shared_future<T>:: wait_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
shared_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 или до момента доступности результата, в зависимости от того, что наступит раньше. Возвращаемое значение определяет состояние результата.
Если будущее является результатом вызова std::async с использованием ленивого вычисления, эта функция возвращает управление немедленно без ожидания.
Эта функция может блокироваться дольше, чем timeout_duration из-за задержек планирования или конкуренции за ресурсы.
Стандарт рекомендует использовать монотонные часы для измерения длительности. Если реализация использует системные часы вместо этого, время ожидания также может быть чувствительным к корректировкам часов.
Поведение не определено, если valid() имеет значение false перед вызовом этой функции.
Содержание |
Параметры
| timeout_duration | - | максимальная длительность блокировки |
Возвращаемое значение
| Константа | Объяснение |
| future_status::deferred | Общее состояние содержит отложенную функцию, использующую ленивые вычисления, поэтому результат будет вычислен только при явном запросе |
| future_status::ready | Результат готов |
| future_status::timeout | Время ожидания истекло |
Исключения
Любое исключение, выброшенное clock, time_point или duration во время выполнения (часы, временные точки и длительности, предоставляемые стандартной библиотекой, никогда не выбрасывают исключений).
Примечания
Реализациям рекомендуется обнаруживать случай, когда 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
Смотрите также
|
ожидает, пока результат станет доступным
(public member function) |
|
|
ожидает результат, возвращает управление, если результат не стал доступным до достижения указанной точки времени
(public member function) |