Namespaces
Variants

std:: future

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)
future
(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
Definiert im Header <future>
template < class T > class future ;
(1) (seit C++11)
template < class T > class future < T & > ;
(2) (seit C++11)
template <> class future < void > ;
(3) (seit C++11)

Die Klassenvorlage std::future bietet einen Mechanismus, um auf das Ergebnis asynchroner Operationen zuzugreifen:

  • Der Ersteller des asynchronen Vorgangs kann dann verschiedene Methoden verwenden, um einen Wert aus dem std::future abzufragen, darauf zu warten oder ihn zu extrahieren. Diese Methoden können blockieren, wenn der asynchrone Vorgang noch keinen Wert bereitgestellt hat.
  • Wenn der asynchrone Vorgang bereit ist, ein Ergebnis an den Ersteller zu senden, kann er dies durch Modifizieren des shared state tun (z.B. std::promise::set_value ), der mit dem std::future des Erstellers verknüpft ist.

Beachten Sie, dass std::future auf einen gemeinsamen Zustand verweist, der nicht mit anderen asynchronen Rückgabeobjekten geteilt wird (im Gegensatz zu std::shared_future ).

Inhaltsverzeichnis

Memberfunktionen

Konstruiert das Future-Objekt
(öffentliche Elementfunktion)
Destruiert das Future-Objekt
(öffentliche Elementfunktion)
Verschiebt das Future-Objekt
(öffentliche Elementfunktion)
Überträgt den gemeinsamen Zustand von * this zu einem shared_future und gibt ihn zurück
(öffentliche Elementfunktion)
Ergebnis abrufen
Gibt das Ergebnis zurück
(öffentliche Elementfunktion)
Zustand
Prüft, ob das Future einen gemeinsamen Zustand hat
(öffentliche Elementfunktion)
Wartet, bis das Ergebnis verfügbar ist
(öffentliche Elementfunktion)
Wartet auf das Ergebnis, kehrt zurück, wenn es für die angegebene Timeout-Dauer nicht verfügbar ist
(öffentliche Elementfunktion)
Wartet auf das Ergebnis, kehrt zurück, wenn es nicht verfügbar ist, bis der angegebene Zeitpunkt erreicht wurde
(öffentliche Elementfunktion)

Beispiele

#include <future>
#include <iostream>
#include <thread>
int main()
{
    // future von einem packaged_task
    std::packaged_task<int()> task([]{ return 7; }); // Funktion kapseln
    std::future<int> f1 = task.get_future(); // Future erhalten
    std::thread t(std::move(task)); // in einem Thread starten
    // future von async()
    std::future<int> f2 = std::async(std::launch::async, []{ return 8; });
    // future von einem promise
    std::promise<int> p;
    std::future<int> f3 = p.get_future();
    std::thread([&p]{ p.set_value_at_thread_exit(9); }).detach();
    std::cout << "Waiting..." << std::flush;
    f1.wait();
    f2.wait();
    f3.wait();
    std::cout << "Done!\nResults are: "
              << f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n';
    t.join();
}

Ausgabe:

Waiting...Done!
Results are: 7 8 9

Beispiel mit Ausnahmen

#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, der eine Exception werfen könnte
            throw std::runtime_error("Example");
        }
        catch (...)
        {
            try
            {
                // Alle geworfenen Exceptions im Promise speichern
                p.set_exception(std::current_exception());
            }
            catch (...) {} // set_exception() könnte ebenfalls werfen
        }
    });
    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

Siehe auch

(C++11)
führt eine Funktion asynchron aus (möglicherweise in einem neuen Thread) und gibt eine std::future zurück, die das Ergebnis enthalten wird
(Funktions-Template)
wartet auf einen Wert (möglicherweise referenziert von anderen Futures), der asynchron gesetzt wird
(Klassen-Template)