Condividi tramite


Classe packaged_task

Descrive un provider asincrono che è un wrapper di chiamata la cui firma di chiamata è Ty(ArgTypes...). Lo stato asincrono associato contiene una copia dell'oggetto chiamabile oltre al potenziale risultato.

Sintassi

template <class>
class packaged_task;

Membri

Costruttori pubblici

Nome Descrizione
packaged_task Costruisce un oggetto packaged_task.
Distruttore packaged_task::~packaged_task Elimina un oggetto packaged_task .

Metodi pubblici

Nome Descrizione
get_future Restituisce un oggetto future con lo stesso stato asincrono associato.
make_ready_at_thread_exit Chiama l'oggetto chiamabile archiviato nello stato asincrono associato e archivia il valore restituito in modo atomico.
reset Restituisce lo stato asincrono associato.
swap Scambia lo stato asincrono associato con un oggetto specificato.
valevole Specifica se l'oggetto ha uno stato asincrono associato.

Operatori pubblici

Nome Descrizione
packaged_task::operator= Trasferisce uno stato asincrono associato da un oggetto specificato.
packaged_task::operator() Chiama l'oggetto chiamabile archiviato nello stato asincrono associato, archivia il valore restituito in modo atomico e imposta lo stato su ready.
Bool packaged_task::operator Specifica se l'oggetto ha uno stato asincrono associato.

Requisiti

Intestazione:<future>

Spazio dei nomi: std

packaged_task::get_future

Restituisce un oggetto di tipo future<Ty> con lo stesso stato asincrono associato.

future<Ty> get_future();

Osservazioni:

Se l'oggetto packaged_task non ha uno stato asincrono associato, il metodo genera un future_error con codice di errore no_state.

Se questo metodo è già stato chiamato per un oggetto packaged_task con lo stesso stato asincrono associato, il metodo genera un future_error con codice di errore future_already_retrieved.

packaged_task::make_ready_at_thread_exit

Chiama l'oggetto chiamabile archiviato nello stato asincrono associato e archivia il valore restituito in modo atomico.

void make_ready_at_thread_exit(ArgTypes... args);

Osservazioni:

Se l'oggetto packaged_task non ha uno stato asincrono associato, il metodo genera un future_error con codice di errore no_state.

Se questo metodo o make_ready_at_thread_exit è già stato chiamato per un oggetto packaged_task con lo stesso stato asincrono associato, il metodo genera un future_error con codice di errore promise_already_satisfied.

In caso contrario, questo operatore chiama INVOKE(fn, args..., Ty), dove fn è l'oggetto chiamabile archiviato nello stato asincrono associato. I valori restituiti vengono archiviato in modo atomico come risultato restituito dello stato asincrono associato.

A differenza di packaged_task::operator(), lo stato asincrono associato non viene impostato su ready fino a quando tutti gli oggetti locali del thread nel thread chiamante sono stati eliminati definitivamente. In genere, i thread bloccati nello stato asincrono associato non vengono sbloccati finché il thread chiamante non viene chiuso.

packaged_task::operator=

Trasferisce lo stato asincrono associato da un oggetto specificato.

packaged_task& operator=(packaged_task&& Right);

Parametri

A destra
Oggetto packaged_task.

Valore restituito

*this

Osservazioni:

Dopo l'operazione, Right non ha più uno stato asincrono associato.

packaged_task::operator()

Chiama l'oggetto chiamabile archiviato nello stato asincrono associato, archivia il valore restituito in modo atomico e imposta lo stato su ready.

void operator()(ArgTypes... args);

Osservazioni:

Se l'oggetto packaged_task non ha uno stato asincrono associato, il metodo genera un future_error con codice di errore no_state.

Se questo metodo o make_ready_at_thread_exit è già stato chiamato per un oggetto packaged_task con lo stesso stato asincrono associato, il metodo genera un future_error con codice di errore promise_already_satisfied.

In caso contrario, questo operatore chiama INVOKE(fn, args..., Ty), dove fn è l'oggetto chiamabile archiviato nello stato asincrono associato. I valori restituiti vengono archiviato in modo atomico come risultato restituito dello stato asincrono associato e lo stato viene impostato su ready. Di conseguenza, i thread bloccati sullo stato asincrono associato vengono sbloccati.

Bool packaged_task::operator

Specifica se l'oggetto ha uno associated asynchronous state.

operator bool() const noexcept;

Valore restituito

true se l'oggetto ha uno stato asincrono associato; in caso contrario, false.

Costruttore packaged_task::packaged_task

Costruisce un oggetto 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);

Parametri

A destra
Oggetto packaged_task.

alloc
Allocatore di memoria. Per altre informazioni, vedere <allocatori>.

Fn
Oggetto funzione.

Osservazioni:

Il primo costruttore costruisce un oggetto packaged_task che non ha uno stato asincrono associato.

Il secondo costruttore costruisce un packaged_task oggetto e trasferisce lo stato asincrono associato da Right. Dopo l'operazione, Right non ha più uno stato asincrono associato.

Il terzo costruttore costruisce un packaged_task oggetto con una copia di fn archiviata nello stato asincrono associato.

Il quarto costruttore costruisce un packaged_task oggetto con una copia di fn archiviata nello stato asincrono associato e usa alloc per l'allocazione di memoria.

Distruttore packaged_task::~packaged_task

Elimina un oggetto packaged_task .

~packaged_task();

Osservazioni:

Se lo stato asincrono associato non è pronto, il distruttore archivia un'eccezione future_error con codice di errore come broken_promise risultato nello stato asincrono associato e tutti i thread bloccati nello stato asincrono associato diventano sbloccati.

packaged_task::reset

Usa un nuovo stato asincrono associato per sostituire lo stato asincrono associato esistente.

void reset();

Osservazioni:

In pratica, questo metodo esegue *this = packaged_task(move(fn)), dove fn è l'oggetto funzione archiviato nello stato asincrono associato per l'oggetto. Di conseguenza, lo stato dell'oggetto viene cancellato e get_future, operator()e make_ready_at_thread_exit possono essere chiamati come se in un oggetto appena costruito.

packaged_task::swap

Scambia lo stato asincrono associato con un oggetto specificato.

void swap(packaged_task& Right) noexcept;

Parametri

A destra
Oggetto packaged_task.

packaged_task::valid

Specifica se l'oggetto ha uno associated asynchronous state.

bool valid() const;

Valore restituito

true se l'oggetto ha uno stato asincrono associato; in caso contrario, false.

Vedi anche

Riferimento file di intestazione
<future>