Namespaces
Variants

std::shared_future<T>:: wait_for

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
template < class Rep, class Period >
std:: future_status wait_for ( const std:: chrono :: duration < Rep,Period > & timeout_duration ) const ;
(seit C++11)

Wartet, bis das Ergebnis verfügbar wird. Blockiert bis zur Ablauf der angegebenen timeout_duration oder bis das Ergebnis verfügbar wird, je nachdem, was zuerst eintritt. Der Rückgabewert identifiziert den Zustand des Ergebnisses.

Wenn die Zukunft das Ergebnis eines Aufrufs von std::async ist, der verzögerte Auswertung verwendete, kehrt diese Funktion sofort zurück, ohne zu warten.

Diese Funktion kann aufgrund von Planungs- oder Ressourcenkonflikten länger blockieren als timeout_duration .

Der Standard empfiehlt, dass ein stabiler Taktgeber zur Messung der Dauer verwendet wird. Falls eine Implementierung stattdessen einen Systemtakt verwendet, kann die Wartezeit auch anfällig für Taktjustierungen sein.

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

Inhaltsverzeichnis

Parameter

timeout_duration - maximale Dauer für die Blockierung

Rückgabewert

Konstante Erklärung
future_status::deferred Der gemeinsame Zustand enthält eine verzögerte Funktion mit verzögerter Auswertung, sodass das Ergebnis nur bei expliziter Anforderung berechnet wird
future_status::ready Das Ergebnis ist bereit
future_status::timeout Das Zeitlimit ist abgelaufen

Ausnahmen

Jede Ausnahme, die von clock, time_point oder duration während der Ausführung geworfen wird (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern werfen niemals).

Hinweise

Die Implementierungen sind angehalten, den Fall zu erkennen, wenn valid == false vor dem Aufruf gilt und eine std::future_error mit einer Fehlerbedingung von std::future_errc::no_state zu werfen.

Beispiel

#include <chrono>
#include <future>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;
int main()
{
    std::shared_future<int> future = std::async(std::launch::async, []()
    {
        std::this_thread::sleep_for(3s);
        return 8;
    });
    std::cout << "waiting...\n";
    std::future_status status;
    do
    {
        switch (status = future.wait_for(1s); status)
        {
            case std::future_status::deferred:
                std::cout << "deferred\n";
                break;
            case std::future_status::timeout:
                std::cout << "timeout\n";
                break;
            case std::future_status::ready:
                std::cout << "ready!\n";
                break;
        }
    }
    while (status != std::future_status::ready);
    std::cout << "result is " << future.get() << '\n';
}

Mögliche Ausgabe:

waiting...
timeout
timeout
timeout
ready!
result is 8

Siehe auch

wartet, bis das Ergebnis verfügbar ist
(öffentliche Elementfunktion)
wartet auf das Ergebnis, kehrt zurück, falls es nicht verfügbar ist, bis der angegebene Zeitpunkt erreicht wurde
(öffentliche Elementfunktion)