std::promise<R>:: set_exception
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Setting the result | ||||
|
promise::set_exception
|
||||
| Non-member Functions | ||||
| Helper Classes | ||||
|
void
set_exception
(
std::
exception_ptr
p
)
;
|
(desde C++11) | |
Almacena atómicamente el puntero de excepción p en el estado compartido y prepara el estado.
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.
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 las llamadas a get_future (por lo tanto no necesitan sincronizarse entre sí).
Contenidos |
Parámetros
| p | - | puntero de excepción a almacenar. El comportamiento es indefinido si p es nulo |
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 .
Ejemplo
#include <future> #include <iostream> #include <thread> int main() { std::promise<int> p; std::future<int> f = p.get_future(); std::thread t([&p] { try { // código que puede lanzar excepciones throw std::runtime_error("Example"); } catch (...) { try { // almacenar cualquier excepción en la promise p.set_exception(std::current_exception()); // o lanzar una excepción personalizada en su lugar // 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: Example
Véase también
|
establece el resultado para indicar una excepción mientras entrega la notificación solo al finalizar el hilo
(función miembro pública) |