Namensräume
Varianten
Aktionen

std::promise<R>::set_value_at_thread_exit

Von cppreference.com
< cpp‎ | thread‎ | promise
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 
 
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

1) Jede Ausnahme, die vom ausgewählten Konstruktor zum Kopieren eines Objekts vom Typ R geworfen wird.
2) Jede Ausnahme, die vom ausgewählten Konstruktor zum Verschieben eines Objekts vom Typ 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) [edit]
setzt das Ergebnis, um eine Ausnahme anzuzeigen, und liefert die Benachrichtigung erst beim Beenden des Threads
(public member function) [bearbeiten]