|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Setting the result | ||||
promise::set_exception | ||||
| Non-member Functions | ||||
| Helper Classes | ||||
void set_exception(std::exception_ptr p); | (since C++11) | |
Atomically stores the exception pointerp into the shared state and makes the state ready.
The operation behaves as thoughset_value,set_exception,set_value_at_thread_exit, andset_exception_at_thread_exit acquire a single mutex associated with the promise object while updating the promise object.
An exception is thrown if there is no shared state or the shared state already stores a value or exception.
Calls to this function do not introduce data races with calls toget_future (therefore they need not synchronize with each other).
Contents |
| p | - | exception pointer to store. The behavior is undefined ifp is null |
(none)
std::future_error on the following conditions:
#include <future>#include <iostream>#include <thread> int main(){std::promise<int> p;std::future<int> f= p.get_future(); std::thread t([&p]{try{// code that may throwthrowstd::runtime_error("Example");}catch(...){try{// store anything thrown in the promise p.set_exception(std::current_exception());// or throw a custom exception instead// p.set_exception(std::make_exception_ptr(MyException("mine")));}catch(...){}// set_exception() may throw too}}); try{std::cout<< f.get();}catch(conststd::exception& e){std::cout<<"Exception from the thread: "<< e.what()<<'\n';} t.join();}
Output:
Exception from the thread: Example
| sets the result to indicate an exception while delivering the notification only at thread exit (public member function)[edit] |