std::promise::set_exception
De cppreference.com
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.
- El estado compartido ya almacena un valor o una excepción. El código de error se establece a promise_already_satisfied.
[editar] Ejemplo
Ejecuta este código
#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) |