РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
808 of 815 menu

Метод wait_for

Метод wait_for класса future ожидает, пока связанная с объектом future асинхронная операция завершится, но не дольше указанного промежутка времени. В первый параметр мы передаем длительность ожидания в виде объекта std::chrono::duration, а во второй - необязательный предикат, который проверяется перед возвратом. Метод возвращает одно из значений перечисления std::future_status: "ready", если результат готов, "timeout", если время ожидания истекло, или "deferred", если операция отложена.

Если у объекта future нет связанного общего состояния, поведение метода не определено. Для проверки наличия состояния перед вызовом используйте метод valid.

Синтаксис

future.wait_for(timeout); future.wait_for(timeout, pred);

Пример

Давайте создадим асинхронную задачу с помощью std::async и подождем ее завершения 100 миллисекунд:

#include <iostream> #include <future> #include <chrono> using namespace std; int main() { auto fut = async(launch::async, [] { this_thread::sleep_for(chrono::milliseconds(50)); return 42; }); auto status = fut.wait_for(chrono::milliseconds(100)); if (status == future_status::ready) { cout << "ready" << endl; cout << fut.get() << endl; } else { cout << "not ready" << endl; } return 0; }

Результат выполнения кода:

"ready" 42

Пример

Давайте уменьшим время ожидания до 10 миллисекунд, тогда задача не успеет завершиться и метод вернет статус "timeout":

#include <iostream> #include <future> #include <chrono> using namespace std; int main() { auto fut = async(launch::async, [] { this_thread::sleep_for(chrono::milliseconds(50)); return 42; }); auto status = fut.wait_for(chrono::milliseconds(10)); if (status == future_status::ready) { cout << "ready" << endl; cout << fut.get() << endl; } else if (status == future_status::timeout) { cout << "timeout" << endl; } return 0; }

Результат выполнения кода:

"timeout"

Смотрите также

  • класс future,
    который представляет результат асинхронной операции
  • метод get,
    который возвращает результат из future
  • метод wait,
    который ожидает завершения операции без ограничения времени
  • метод valid,
    который проверяет наличие общего состояния у future
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить