Espacios de nombres
Variantes
Acciones

std::future::get

De cppreference.com
< cpp‎ | thread‎ | future
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
Recuperación segura
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
T get();
(1) (miembro solo de la plantilla genérica future)
(desde C++11)
T& get();
(2) (miembro solo de la especialización de plantilla future<T&>)
(desde C++11)
void get();
(3) (miembro solo de la especialización de plantilla future<void>)
(desde C++11)

La función miembro get espera hasta que el objeto future tenga un resultado válido y (dependiendo de cual plantilla se use) lo recupera. Efectivamente llama a wait() para poder esperar el resultado.

La plantilla genérica y las dos especializaciones de plantilla, cada una contiene una sola versión de get. Las tres versiones de get solamente difieren en el tipo de retorno.

El comportamiento no está definido si valid() es false antes de la llamada a esta función.

Cualquier estado compartido se libera. valid() es false después de llamar a esta función miembro.

Contenido

[editar]Parámetros

(Ninguno)

[editar]Valor de retorno

1) El valor v almacenado en el estado compartido, al igual que std::move(v).
2) La referencia almacenada como valor en el estado compartido.
3) Nada.

[editar]Excepciones

Si una excepción estaba almacenada en el estado compartido referenciado por el objeto futuro (por ejemplo, mediante una llamada a std::promise::set_exception()) entonces la excepción se lanzará.

[editar]Notas

Se incentiva a las implementaciones a detectar el caso cuando valid() sea false antes de la llamada y lanzar std::future_error con un código de error std::future_errc::no_state.

[editar]Ejemplo

#include <thread>#include <future>#include <iostream>#include <string>#include <chrono>   std::string time(){staticauto start =std::chrono::steady_clock::now();std::chrono::duration<double> d =std::chrono::steady_clock::now()- start;return"["+std::to_string(d.count())+"s]";}int main(){usingnamespace std::chrono_literals;{std::cout<< time()<<" lanzando hilo\n";std::future<int> f =std::async(std::launch::async, []{std::this_thread::sleep_for(1s);return7;});std::cout<< time()<<" a la espera del objeto futuro, f.valid() == "<< f.valid()<<"\n";int n = f.get();std::cout<< time()<<" future.get() regresó con "<< n <<". f.valid() = "<< f.valid()<<'\n';}   {std::cout<< time()<<" lanzando hilo\n";std::future<int> f =std::async(std::launch::async, []{std::this_thread::sleep_for(1s);returntrue?throwstd::runtime_error("7"):7;});std::cout<< time()<<" a la espera del objeto futuro, f.valid() == "<< f.valid()<<"\n";try{int n = f.get();std::cout<< time()<<" future.get() regresó con "<< n <<" f.valid() = "<< f.valid()<<'\n';}catch(conststd::exception& e){std::cout<< time()<<" se atrapó excepción "<< e.what()<<", f.valid() == "<< f.valid()<<"\n";}}}

Posible salida:

[0.000004s] lanzando hilo [0.000461s] a la espera del objeto futuro, f.valid() == 1 [1.001156s] future.get() regresó con 7. f.valid() = 0 [1.001192s] lanzando hilo [1.001275s] a la espera del objeto futuro, f.valid() == 1 [2.002356s] se atrapó excepción 7, f.valid() == 0

[editar]Véase también

Comprueba si el objeto futuro tiene un estado compartido.
(función miembro pública)[editar]
close