std::promise::set_exception
De cppreference.com
<tbody>
</tbody>
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í).
Parámetros
| p | - | El puntero a excepción a almacenar. El comportamiento no está definido si p es nulo.
|
Valor de retorno
(Ninguno)
Excepciones
std::future_error en las siguientes condiciones:
*thisno 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.
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
Véase también
| Establece el resultado para indicar una excepción mientras notifica solamente cuando el hilo termina. (función miembro pública) |