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
.