Espacios de nombres
Variantes
Acciones

std::promise::set_exception

De cppreference.com
< cpp‎ | thread‎ | promise
 
 
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
(C++11)
Gestión genérica de bloqueo
(C++11)
(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)
(C++11)
Recuperación segura
(C++26)
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
 
 
void set_exception( std::exception_ptr p );
(desde C++11)

Atómicamente almacena el puntero a excepción p en el estado compartido y deja el estado listo.

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

p - El puntero a excepción a almacenar. El comportamiento no está definido si p es nulo.

[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.

[editar] Ejemplo

#include <thread>
#include <iostream>
#include <future>
 
int main()
{
    std::promise<int> p;
    std::future<int> f = p.get_future();
 
    std::thread t([&p]{
        try {
            // código que puede lanzar
            throw std::runtime_error("Ejemplo");
        } catch(...) {
            try {
                // almacenar lo que se haya lanzado en el objeto promesa
                p.set_exception(std::current_exception());
                // o en su lugar lanzar una excepción personalizada
                // p.set_exception(std::make_exception_ptr(MyException("mine")));
            } catch(...) {} // set_exception() también puede lanzar
        }
    });
 
    try {
        std::cout << f.get();
    } catch(const std::exception& e) {
        std::cout << "Excepción del hilo: " << e.what() << '\n';
    }
    t.join();
}

Salida:

Excepción del hilo: Ejemplo

[editar] Véase también

Establece el resultado para indicar una excepción mientras notifica solamente cuando el hilo termina.
(función miembro pública) [editar]