std::promise<R>::set_exception
Von cppreference.com
| void set_exception( std::exception_ptr p ); |
(seit C++11) | |
Speichert den Exception-Pointer p atomar im gemeinsam genutzten Zustand und macht den Zustand bereit.
Die Operation verhält sich so, als ob set_value, set_exception, set_value_at_thread_exit und set_exception_at_thread_exit eine einzelne Mutex, die dem Promise-Objekt zugeordnet ist, erwerben, während das Promise-Objekt aktualisiert wird.
Eine Ausnahme wird ausgelöst, wenn kein gemeinsam genutzter Zustand vorhanden ist oder der gemeinsam genutzte Zustand bereits einen Wert oder eine Ausnahme speichert.
Aufrufe dieser Funktion führen keine Datenrennen mit Aufrufen von get_future ein (daher müssen sie nicht miteinander synchronisiert werden).
Inhalt |
[edit] Parameter
| p | - | Exception-Pointer zum Speichern. Das Verhalten ist undefiniert, wenn p null ist |
[edit] Rückgabewert
(keine)
[edit] Ausnahmen
std::future_error unter folgenden Bedingungen
- *this hat keinen geteilten Zustand. Der Fehlercode wird auf no_state gesetzt.
- Der gemeinsame Zustand speichert bereits einen Wert oder eine Ausnahme. Der Fehlercode wird auf promise_already_satisfied gesetzt.
[edit] Beispiel
Führen Sie diesen Code aus
#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 throw throw std::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 (const std::exception& e) { std::cout << "Exception from the thread: " << e.what() << '\n'; } t.join(); }
Ausgabe
Exception from the thread: Example
[edit] Siehe auch
| setzt das Ergebnis, um eine Ausnahme anzuzeigen, und liefert die Benachrichtigung erst beim Beenden des Threads (public member function) |