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 ;
(depuis C++11)

Attend que le résultat soit disponible. Bloque jusqu'à ce que la durée spécifiée timeout_duration soit écoulée ou que le résultat devienne disponible, selon la première éventualité. La valeur de retour identifie l'état du résultat.

Si le futur est le résultat d'un appel à std::async qui a utilisé l'évaluation paresseuse, cette fonction retourne immédiatement sans attendre.

Cette fonction peut se bloquer plus longtemps que timeout_duration en raison de délais de planification ou de conflits de ressources.

La norme recommande qu'une horloge stable soit utilisée pour mesurer la durée. Si une implémentation utilise plutôt une horloge système, le temps d'attente peut également être sensible aux ajustements d'horloge.

Le comportement n'est pas défini si valid() est false avant l'appel à cette fonction.

Table des matières

Paramètres

timeout_duration - durée maximale de blocage

Valeur de retour

Constante Explication
future_status::deferred L'état partagé contient une fonction différée utilisant l'évaluation paresseuse, donc le résultat sera calculé uniquement lorsqu'il sera explicitement demandé
future_status::ready Le résultat est prêt
future_status::timeout Le délai d'attente a expiré

Exceptions

Toute exception levée par clock, time_point ou duration durant l'exécution (les horloges, points temporels et durées fournis par la bibliothèque standard ne lèvent jamais d'exception).

Notes

Les implémentations sont encouragées à détecter le cas où valid == false avant l'appel et à lever une std::future_error avec une condition d'erreur de std::future_errc::no_state .

Exemple

#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';
}

Sortie possible :

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

Voir aussi

attend que le résultat soit disponible
(fonction membre publique)
attend le résultat, retourne s'il n'est pas disponible jusqu'à ce que le point temporel spécifié soit atteint
(fonction membre publique)