Namespaces
Variants

std::promise<R>:: set_value_at_thread_exit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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:

1) Cualquier excepción lanzada por el constructor seleccionado para copiar un objeto de tipo R .
2) Cualquier excepción lanzada por el constructor seleccionado para mover un objeto de tipo 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)