std::shared_future<T>:: wait_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
shared_future::wait_for
|
||||
|
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) |