<future>
Incluez l’en-tête <standard pour> définir des modèles de classe et des modèles de prise en charge qui simplifient l’exécution d’une fonction, éventuellement dans un thread distinct, et la récupération de son résultat. Le résultat est la valeur retournée par la fonction ou une exception émise par la fonction, mais qui n’est pas interceptée dans la fonction.
Cet en-tête utilise le runtime d’accès concurrentiel (ConcRT) pour pouvoir l’utiliser avec d’autres mécanismes ConcRT. Pour plus d’informations sur ConcRT, consultez Runtime d’accès concurrentiel.
Syntaxe
#include <future>
Notes
Remarque
Dans le code compilé à l’aide de /clr, cet en-tête est bloqué.
Un fournisseur asynchrone stocke le résultat d’un appel de fonction. Un objet de retour asynchrone est utilisé pour récupérer le résultat d’un appel de fonction. Un état asynchrone associé permet la communication entre un fournisseur asynchrone et un ou plusieurs objets de retour asynchrones.
Un programme ne crée pas directement les objets d’état asynchrone associé. Le programme crée un fournisseur asynchrone chaque fois qu’il en a besoin, puis il crée un objet de retour asynchrone qui partage son état asynchrone associé avec le fournisseur. Les fournisseurs asynchrones et les objets de retour asynchrones gèrent les objets qui contiennent leur état asynchrone associé partagé. Quand le dernier objet qui référence l’état asynchrone associé le libère, l’objet qui contient l’état asynchrone associé est détruit.
Un fournisseur asynchrone ou un objet de retour asynchrone qui n’a aucun état asynchrone associé est vide.
Un état asynchrone associé est prêt uniquement si son fournisseur asynchrone a stocké une valeur de retour ou une exception.
La fonction async
de modèle et les modèles promise
de classe et packaged_task
sont des fournisseurs asynchrones. Les modèles future
de classe et shared_future
décrivent les objets de retour asynchrones.
Chacun des modèles promise
de classe , future
et shared_future
a une spécialisation pour le type void
et une spécialisation partielle pour le stockage et la récupération d’une valeur par référence. Ces spécialisations diffèrent du modèle principal uniquement dans les signatures et la sémantique des fonctions qui stockent et récupèrent la valeur retournée.
Les modèles future
de classe et shared_future
ne bloquent jamais dans leurs destructeurs, sauf dans un cas qui est conservé pour la compatibilité descendante : Contrairement à tous les autres futurs, pour un future
— ou le dernier shared_future
— qui est attaché à une tâche démarrée avec std::async
, le destructeur bloque si la tâche n’est pas terminée ; autrement dit, il bloque si ce thread n’a pas encore appelé .get()
ou .wait()
si la tâche est toujours en cours d’exécution. La note d’utilisation suivante a été ajoutée à la description du std::async
projet de norme : « [Remarque : Si un futur obtenu à partir de std ::async est déplacé en dehors de l’étendue locale, un autre code qui utilise l’avenir doit être conscient que le destructeur de l’avenir peut bloquer le blocage de l’état partagé pour que l’état partagé devienne prêt.—note de fin] » Dans tous les autres cas, future
et shared_future
les destructeurs sont requis et sont garantis de ne jamais bloquer.
Membres
Classes
Nom | Description |
---|---|
future, classe | Décrit un objet de retour asynchrone. |
future_error, classe | Décrit un objet d’exception qui peut être levé par des méthodes dont les types gèrent les objets future . |
packaged_task, classe | Décrit un fournisseur asynchrone qui est un wrapper d’appel dont la signature d’appel est Ty(ArgTypes...) . Son état asynchrone associé contient une copie de l’objet pouvant être appelé, ainsi que le résultat potentiel. |
promise, classe | Décrit un fournisseur asynchrone. |
shared_future, classe | Décrit un objet de retour asynchrone. Contrairement à un objet future , un fournisseur asynchrone peut être associé à un nombre quelconque d’objets shared_future . |
Structures
Nom | Description |
---|---|
is_error_code_enum, structure | Spécialisation qui indique que future_errc est adapté au stockage d’un error_code . |
uses_allocator, structure | Spécialisation qui contient toujours la valeur true. |
Functions
Nom | Description |
---|---|
async | Représente un fournisseur asynchrone. |
future_category | Retourne une référence à l’objet error_category qui caractérise les erreurs associées aux objets future . |
make_error_code | Crée un error_code dont l’objet error_category caractérise les erreurs de future . |
make_error_condition | Crée un error_condition dont l’objet error_category caractérise les erreurs de future . |
swap | Échange l’état asynchrone associé d’un objet promise avec celui d’un autre. |
Énumérations
Nom | Description |
---|---|
future_errc | Fournit des noms symboliques pour toutes les erreurs signalées par la classe future_error . |
future_status | Fournit les noms symboliques pour les raisons qu’une fonction d’attente chronométrée peut retourner. |
lancer | Représente un type de masque de bits qui décrit les modes possibles pour la fonction de modèle async . |