Partager via


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>