std::promise::set_value_at_thread_exit
void set_value_at_thread_exit( const R& value ); |
(1) | (solo miembro de la plantilla genérica promise )(desde C++11) |
void set_value_at_thread_exit( R&& value ); |
(2) | (solo miembro de la plantilla genérica promise )(desde C++11) |
void set_value_at_thread_exit( R& value ); |
(3) | (solo miembro de la especialización de plantilla promise<R&> )(desde C++11) |
void set_value_at_thread_exit() |
(4) | (solo miembro de la especialización de plantilla promise<void> )(desde C++11) |
Almacena el valor value
en el estado compartido sin dejarlo listo de inmediato. El estado se deja listo cuando el hilo actual termina, después de que todas las variables con duración de almacenamiento local al hilo se han destruido.
Esta operación se comporta como si set_value, set_exception, set_value_at_thread_exit
, y set_exception_at_thread_exit tomaran posesión de un solo mutex asociado con el objeto promesa mientras se actualiza el objeto promesa.
Se lanza una excepción si no hay un estado compartido o si el estado compartido ya almacena un valor o excepción.
Las llamadas a esta función no introducen carreras de datos con llamadas a get_future (por lo tanto no necesitan sincronizarse entre sí).
Contenido |
[editar] Parámetros
value | - | El valor a almacenar en el estado compartido. |
[editar] Valor de retorno
(Ninguno)
[editar] Excepciones
std::future_error en las siguientes condiciones:
- *this no tiene un estado compartido. El código de error se establece a no_state.
- El estado compartido ya almacena un valor o una excepción. El código de error se establece a promise_already_satisfied.
Adicionalmente:
value
.value
.[editar] Ejemplo
#include <iostream> #include <future> #include <thread> int main() { using namespace std::chrono_literals; std::promise<int> p; std::future<int> f = p.get_future(); std::thread([&p] { std::this_thread::sleep_for(1s); p.set_value_at_thread_exit(9); }).detach(); std::cout << "Esperando..." << std::flush; f.wait(); std::cout << "¡Listo!\nEl resultado es: " << f.get() << '\n'; }
Salida:
Esperando...¡Listo! El resultado es: 9
[editar] Véase también
Establece el resultado a un valor específico. (función miembro pública) |