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.
Syntaxe
template <class>
class packaged_task;
Membres
Constructeurs publics
Nom | Description |
---|---|
packaged_task | Construit un objet packaged_task . |
packaged_task::~packaged_task, destructeur | Détruit un objet packaged_task . |
Méthodes publiques
Nom | Description |
---|---|
get_future | Retourne un objet future qui a le même état asynchrone associé. |
make_ready_at_thread_exit | Appelle l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé et stocke atomiquement la valeur retournée. |
reset | Remplace l’état asynchrone associé. |
swap | Échange l’état asynchrone associé avec un objet spécifié. |
valable | Spécifie si l’objet a un état asynchrone associé. |
Opérateurs publics
Nom | Description |
---|---|
packaged_task::operator= | Transfère un état asynchrone associé à partir d’un objet spécifié. |
packaged_task::operator() | Appelle l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé, stocke atomiquement la valeur retournée et définit l’état sur ready. |
packaged_task::operator bool | Spécifie si l’objet a un état asynchrone associé. |
Spécifications
Header :<future>
Espace de noms : std
packaged_task::get_future
Retourne un objet de type future<Ty>
qui a le même état asynchrone associé.
future<Ty> get_future();
Notes
Si l’objet packaged_task
n’a pas d’état asynchrone associé, cette méthode lève une exception future_error avec le code d’erreur no_state
.
Si cette méthode a déjà été appelée pour un objet packaged_task
ayant le même état asynchrone associé, la méthode lève une exception future_error
avec le code d’erreur future_already_retrieved
.
packaged_task::make_ready_at_thread_exit
Appelle l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé et stocke atomiquement la valeur retournée.
void make_ready_at_thread_exit(ArgTypes... args);
Notes
Si l’objet packaged_task
n’a pas d’état asynchrone associé, cette méthode lève une exception future_error avec le code d’erreur no_state
.
Si cette méthode ou make_ready_at_thread_exit a déjà été appelée pour un objet packaged_task
ayant le même état asynchrone associé, la méthode lève une exception future_error
avec le code d’erreur promise_already_satisfied
.
Sinon, cet opérateur appelle INVOKE(fn, args..., Ty)
, où fn est l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé. Chaque valeur retournée est stockée atomiquement comme résultat retourné de l’état asynchrone associé.
Contrairement à packaged_task ::operator(), l’état asynchrone associé n’est pas défini ready
tant que tous les objets locaux de thread dans le thread appelant n’ont pas été détruits. En règle générale, les threads qui sont bloqués sur l’état asynchrone associé ne sont pas débloqués tant que le thread appelant n’est pas arrêté.
packaged_task::operator=
Transfère l’état asynchrone associé à partir d’un objet spécifié.
packaged_task& operator=(packaged_task&& Right);
Paramètres
Right
Objet packaged_task
.
Valeur de retour
*this
Notes
Après l’opération, Right n’a plus d’état asynchrone associé.
packaged_task::operator()
Appelle l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé, stocke atomiquement la valeur retournée et définit l’état sur ready.
void operator()(ArgTypes... args);
Notes
Si l’objet packaged_task
n’a pas d’état asynchrone associé, cette méthode lève une exception future_error avec le code d’erreur no_state
.
Si cette méthode ou make_ready_at_thread_exit a déjà été appelée pour un objet packaged_task
ayant le même état asynchrone associé, la méthode lève une exception future_error
avec le code d’erreur promise_already_satisfied
.
Sinon, cet opérateur appelle INVOKE(fn, args..., Ty)
, où fn est l’objet pouvant être appelé qui est stocké dans l’état asynchrone associé. Chaque valeur retournée est stockée atomiquement comme résultat retourné de l’état asynchrone associé, et l’état est défini sur ready. Tous les threads qui sont bloqués sur l’état asynchrone associé sont alors libérés.
packaged_task::operator bool
Spécifie si l’objet a un associated asynchronous state
.
operator bool() const noexcept;
Valeur de retour
true
si l'objet possède un état asynchrone associé ; sinon, false
.
packaged_task::packaged_task, constructeur
Construit un objet packaged_task
.
packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
explicit packaged_task(Fn&& fn);
template <class Fn, class Alloc>
explicit packaged_task(
allocator_arg_t, const Alloc& alloc, Fn&& fn);
Paramètres
Right
Objet packaged_task
.
alloc
Allocateur de mémoire. Pour plus d’informations, consultez les allocateurs>.<
Fn
Objet de fonction.
Notes
Le premier constructeur construit un objet packaged_task
sans état asynchrone associé.
Le deuxième constructeur construit un packaged_task
objet et transfère l’état asynchrone associé de Right. Après l’opération, Right n’a plus d’état asynchrone associé.
Le troisième constructeur construit un packaged_task
objet qui a une copie de fn stockée dans son état asynchrone associé.
Le quatrième constructeur construit un packaged_task
objet qui a une copie de fn stocké dans son état asynchrone associé et utilise alloc
pour l’allocation de mémoire.
packaged_task::~packaged_task, destructeur
Détruit un objet packaged_task
.
~packaged_task();
Notes
Si l’état asynchrone associé n’est pas prêt, le destructeur stocke une exception future_error qui a un code d’erreur comme broken_promise
résultat dans l’état asynchrone associé, et tous les threads bloqués sur l’état asynchrone associé deviennent déblocés.
packaged_task::reset
Remplace l’état asynchrone associé existant par un nouvel état asynchrone associé.
void reset();
Notes
En effet, cette méthode exécute *this = packaged_task(move(fn))
, où fn est l’objet de fonction qui est stocké dans l’état asynchrone associé pour cet objet. Par conséquent, l’état de l’objet est effacé et get_future, opérateur() et make_ready_at_thread_exit peut être appelé comme s’il s’agit d’un objet nouvellement construit.
packaged_task::swap
Échange l’état asynchrone associé avec un objet spécifié.
void swap(packaged_task& Right) noexcept;
Paramètres
Right
Objet packaged_task
.
packaged_task::valid
Spécifie si l’objet a un associated asynchronous state
.
bool valid() const;
Valeur de retour
true
si l'objet possède un état asynchrone associé ; sinon, false
.
Voir aussi
Informations de référence sur les fichiers d’en-tête
<future>