Namespaces
Variants

std::promise<R>:: set_value_at_thread_exit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Haupttemplate
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 bereit zu machen. Der Zustand wird bereit gemacht, wenn der aktuelle Thread beendet wird, nachdem alle Variablen mit Thread-lokaler Speicherdauer 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, mit dem Promise-Objekt assoziierte Mutex erwerben, während sie das Promise-Objekt aktualisieren.

Aufrufe dieser Funktion führen nicht zu Datenrennen mit Aufrufen von get_future (daher müssen sie nicht miteinander synchronisiert werden).

Inhaltsverzeichnis

Parameter

value - Wert, der im gemeinsamen Zustand gespeichert werden soll

Rückgabewert

(keine)

Exceptions

std::future_error unter den folgenden Bedingungen:

  • * this besitzt keinen gemeinsamen Zustand. Der Fehlercode wird auf no_state gesetzt.
  • Der gemeinsame Zustand speichert bereits einen Wert oder eine Exception. Der Fehlercode wird auf promise_already_satisfied gesetzt.

Zusätzlich:

1) Jede Ausnahme, die vom Konstruktor ausgelöst wird, der zum Kopieren eines Objekts vom Typ R ausgewählt wurde.
2) Jede Ausnahme, die vom Konstruktor ausgelöst wird, der zum Verschieben eines Objekts vom Typ R ausgewählt wurde.

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2098 C++11 es war unklar, welche Ausnahmen geworfen werden müssen klargestellt

Siehe auch

setzt das Ergebnis auf einen bestimmten Wert
(öffentliche Elementfunktion)
setzt das Ergebnis, um eine Ausnahme anzuzeigen, während die Benachrichtigung nur beim Thread-Ende übermittelt wird
(öffentliche Elementfunktion)