Namespaces
Variants

std::shared_future<T>:: wait

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
void wait ( ) const ;
(seit C++11)

Blockiert, bis das Ergebnis verfügbar wird. valid ( ) == true nach dem Aufruf.

Das Verhalten ist undefiniert, falls valid ( ) == false vor dem Aufruf dieser Funktion.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

(keine)

Exceptions

Kann implementierungsdefinierte Ausnahmen auslösen.

Hinweise

Die Implementierungen sind angehalten, den Fall zu erkennen, wenn valid ( ) == false vor dem Aufruf und eine std::future_error mit einem Fehlerzustand von std::future_errc::no_state zu werfen.

Das Aufrufen von wait auf demselben std::shared_future von mehreren Threads ist nicht sicher; die vorgesehene Verwendung ist, dass jeder Thread, der auf denselben gemeinsamen Zustand wartet, eine Kopie eines std::shared_future besitzt.

Beispiel

#include <chrono>
#include <future>
#include <iostream>
#include <thread>
int fib(int n)
{
    if (n < 3)
        return 1;
    else
        return fib(n - 1) + fib(n - 2);
}
int main()
{
    std::shared_future<int> f1 = std::async(std::launch::async, []() { return fib(40); });
    std::shared_future<int> f2 = std::async(std::launch::async, []() { return fib(43); });
    std::cout << "waiting... " << std::flush;
    const auto start = std::chrono::system_clock::now();
    f1.wait();
    f2.wait();
    const auto diff = std::chrono::system_clock::now() - start;
    std::cout << std::chrono::duration<double>(diff).count() << " seconds\n";
    std::cout << "f1: " << f1.get() << '\n';
    std::cout << "f2: " << f2.get() << '\n';
}

Mögliche Ausgabe:

waiting... 1.61803 seconds
f1: 102334155
f2: 433494437

Siehe auch

wartet auf das Ergebnis, kehrt zurück, wenn es für die angegebene Zeitdauer 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)