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 ; |
(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) |