std::promise<R>::set_value_at_thread_exit
| Hauptvorlage |
||
| void set_value_at_thread_exit( const R& value ); |
(1) | (seit C++11) |
| void set_value_at_thread_exit( R&& value ); |
(2) | (seit C++11) |
| std::promise<R&> Spezialisierungen |
||
| void set_value_at_thread_exit( R& value ); |
(3) | (seit C++11) |
| std::promise<void> Spezialisierung |
||
| void set_value_at_thread_exit(); |
(4) | (seit C++11) |
Speichert den value im gemeinsamen Zustand, ohne den Zustand sofort fertigzustellen. Der Zustand wird fertiggestellt, wenn der aktuelle Thread beendet wird, nachdem alle Variablen mit Thread-lokaler Speicherklasse zerstört wurden.
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, während des Aktualisierens des Promise-Objekts erwerben.
Aufrufe dieser Funktion führen keine Datenrennen mit Aufrufen von get_future ein (daher müssen sie nicht miteinander synchronisiert werden).
Inhalt |
[edit] Parameter
| value | - | Wert, der im gemeinsamen Zustand gespeichert werden soll |
[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.
Zusätzlich
R geworfen wird.R geworfen wird.[edit] Beispiel
#include <future> #include <iostream> #include <thread> int main() { using namespace std::chrono_literals; std::promise<int> p; std::future<int> f = p.get_future(); std::thread([&p] { std::this_thread::sleep_for(1s); p.set_value_at_thread_exit(9); }).detach(); std::cout << "Waiting... " << std::flush; f.wait(); std::cout << "Done!\nResult is: " << f.get() << '\n'; }
Ausgabe
Waiting... Done! Result is: 9
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2098 | C++11 | Es war unklar, welche Ausnahmen geworfen werden mussten. | wurde klargestellt |
[edit] Siehe auch
| setzt das Ergebnis auf einen bestimmten Wert (public member function) | |
| setzt das Ergebnis, um eine Ausnahme anzuzeigen, und liefert die Benachrichtigung erst beim Beenden des Threads (public member function) |