std::future<T>:: wait_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
future::wait_for
|
||||
|
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 länger blockieren als timeout_duration aufgrund von Planungs- oder Ressourcenkonflikt-Verzögerungen.
Der Standard empfiehlt, dass eine stetige Uhr zur Messung der Dauer verwendet wird. Falls eine Implementierung stattdessen eine Systemuhr verwendet, kann die Wartezeit auch anfällig für Uhranpassungen 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 einen 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::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) |