std:: future
From cppreference.net
C++
Concurrency support library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::future
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
Défini dans l'en-tête
<future>
|
||
|
template
<
class
T
>
class
future
;
|
(1) | (depuis C++11) |
|
template
<
class
T
>
class
future
<
T
&
>
;
|
(2) | (depuis C++11) |
|
template
<>
class
future
<
void
>
;
|
(3) | (depuis C++11) |
Le modèle de classe
std::future
fournit un mécanisme pour accéder au résultat d'opérations asynchrones :
-
Une opération asynchrone (créée via
std::async
,
std::packaged_task
, ou
std::promise
) peut fournir un objet
std::futureau créateur de cette opération asynchrone.
-
Le créateur de l'opération asynchrone peut ensuite utiliser diverses méthodes pour interroger, attendre ou extraire une valeur du
std::future. Ces méthodes peuvent bloquer si l'opération asynchrone n'a pas encore fourni de valeur.
-
Lorsque l'opération asynchrone est prête à envoyer un résultat au créateur, elle peut le faire en modifiant
l'état partagé
(par exemple
std::promise::set_value
) qui est lié au
std::futuredu créateur.
Notez que
std::future
fait référence à un état partagé qui n'est partagé avec aucun autre objet de retour asynchrone (contrairement à
std::shared_future
).
Table des matières |
Fonctions membres
|
construit l'objet future
(fonction membre publique) |
|
|
détruit l'objet future
(fonction membre publique) |
|
|
déplace l'objet future
(fonction membre publique) |
|
|
transfère l'état partagé de
*
this
vers un
shared_future
et le retourne
(fonction membre publique) |
|
Obtention du résultat |
|
|
retourne le résultat
(fonction membre publique) |
|
État |
|
|
vérifie si le future a un état partagé
(fonction membre publique) |
|
|
attend que le résultat devienne disponible
(fonction membre publique) |
|
|
attend le résultat, retourne s'il n'est pas disponible après la durée de timeout spécifiée
(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) |
|
Exemples
Exécuter ce code
#include <future> #include <iostream> #include <thread> int main() { // future from a packaged_task std::packaged_task<int()> task([]{ return 7; }); // encapsuler la fonction std::future<int> f1 = task.get_future(); // obtenir un future std::thread t(std::move(task)); // lancer sur un thread // future from an async() std::future<int> f2 = std::async(std::launch::async, []{ return 8; }); // future from a promise std::promise<int> p; std::future<int> f3 = p.get_future(); std::thread([&p]{ p.set_value_at_thread_exit(9); }).detach(); std::cout << "Waiting..." << std::flush; f1.wait(); f2.wait(); f3.wait(); std::cout << "Done!\nResults are: " << f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n'; t.join(); }
Sortie :
Waiting...Done! Results are: 7 8 9
Exemple avec exceptions
Exécuter ce code
#include <future> #include <iostream> #include <thread> int main() { std::promise<int> p; std::future<int> f = p.get_future(); std::thread t([&p] { try { // code qui peut lever une exception throw std::runtime_error("Example"); } catch (...) { try { // stocker toute exception levée dans la promesse p.set_exception(std::current_exception()); } catch (...) {} // set_exception() peut aussi lever une exception } }); try { std::cout << f.get(); } catch (const std::exception& e) { std::cout << "Exception du thread : " << e.what() << '\n'; } t.join(); }
Sortie :
Exception du thread : Example
Voir aussi
|
(C++11)
|
exécute une fonction de manière asynchrone (potentiellement dans un nouveau thread) et retourne une
std::future
qui contiendra le résultat
(modèle de fonction) |
|
(C++11)
|
attend une valeur (potentiellement référencée par d'autres futures) qui est définie de manière asynchrone
(modèle de classe) |