std::future::get
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
v
almacenado en el estado compartido, al igual que std::move(v).[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) |