Namespaces
Variants

std::future<T>:: wait_for

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
template < class Rep, class Period >
std:: future_status wait_for ( const std:: chrono :: duration < Rep,Period > & timeout_duration ) const ;
(desde C++11)

Espera a que el resultado esté disponible. Bloquea hasta que transcurra el timeout_duration especificado o hasta que el resultado esté disponible, lo que ocurra primero. El valor de retorno identifica el estado del resultado.

Si el futuro es el resultado de una llamada a std::async que utilizó evaluación diferida, esta función retorna inmediatamente sin esperar.

Esta función puede bloquearse por más tiempo que timeout_duration debido a demoras de planificación o contención de recursos.

La norma recomienda que se utilice un reloj constante para medir la duración. Si una implementación utiliza un reloj del sistema en su lugar, el tiempo de espera también puede ser sensible a los ajustes del reloj.

El comportamiento es indefinido si valid() es false antes de la llamada a esta función.

Contenidos

Parámetros

timeout_duration - duración máxima para bloquear

Valor de retorno

Constante Explicación
future_status::deferred El estado compartido contiene una función diferida que utiliza evaluación perezosa, por lo que el resultado se calculará solo cuando se solicite explícitamente
future_status::ready El resultado está listo
future_status::timeout El tiempo de espera ha expirado

Excepciones

Cualquier excepción lanzada por clock, time_point o duration durante la ejecución (los clocks, time points y durations proporcionados por la biblioteca estándar nunca lanzan excepciones).

Notas

Se recomienda a las implementaciones detectar el caso cuando valid == false antes de la llamada y lanzar un std::future_error con una condición de error de std::future_errc::no_state .

Ejemplo

#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';
}

Salida posible:

waiting...
timeout
timeout
timeout
ready!
result is 8

Véase también

espera a que el resultado esté disponible
(función miembro pública)
espera el resultado, retorna si no está disponible hasta que se alcanza el punto temporal especificado
(función miembro pública)