std::promise<R>:: set_value_at_thread_exit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Setting the result | ||||
|
promise::set_value_at_thread_exit
|
||||
| Non-member Functions | ||||
| Helper Classes | ||||
|
Plantilla principal
|
||
|
void
set_value_at_thread_exit
(
const
R
&
value
)
;
|
(1) | (desde C++11) |
|
void
set_value_at_thread_exit
(
R
&&
value
)
;
|
(2) | (desde C++11) |
|
std::
promise
<
R
&
>
Especializaciones
|
||
|
void
set_value_at_thread_exit
(
R
&
value
)
;
|
(3) | (desde C++11) |
|
std::
promise
<
void
>
Especialización
|
||
|
void
set_value_at_thread_exit
(
)
;
|
(4) | (desde C++11) |
Almacena el value en el estado compartido sin hacer que el estado esté listo inmediatamente. El estado se prepara cuando el hilo actual finaliza, después de que todas las variables con duración de almacenamiento local al hilo hayan sido destruidas.
La operación se comporta como si
set_value
,
set_exception
,
set_value_at_thread_exit
, y
set_exception_at_thread_exit
adquirieran un único mutex asociado con el objeto promise mientras actualizan el objeto promise.
Las llamadas a esta función no introducen carreras de datos con las llamadas a get_future (por lo tanto no necesitan sincronizarse entre sí).
Contenidos |
Parámetros
| value | - | valor a almacenar en el estado compartido |
Valor de retorno
(ninguno)
Excepciones
std::future_error en las siguientes condiciones:
- * this no tiene estado compartido. El código de error se establece en no_state .
- El estado compartido ya almacena un valor o excepción. El código de error se establece en promise_already_satisfied .
Adicionalmente:
R
.
R
.
Ejemplo
#include <future> #include <iostream> #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 << "Waiting... " << std::flush; f.wait(); std::cout << "Done!\nResult is: " << f.get() << '\n'; }
Salida:
Waiting... Done! Result is: 9
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2098 | C++11 | no estaba claro qué excepciones deben lanzarse | aclarado |
Véase también
|
establece el resultado a un valor específico
(función miembro pública) |
|
|
establece el resultado para indicar una excepción mientras entrega la notificación solo al salir del hilo
(función miembro pública) |