Namensräume
Varianten
Aktionen

std::promise<R>::set_exception

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
 
 
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

#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) [bearbeiten]