packaged_task – třída
Popisuje asynchronního zprostředkovatele , který je obálka volání, jejíž podpis volání je Ty(ArgTypes...)
. Přidružený asynchronní stav obsahuje kopii jeho volatelného objektu kromě potenciálního výsledku.
Syntaxe
template <class>
class packaged_task;
Členové
Veřejné konstruktory
Název | Popis |
---|---|
packaged_task | packaged_task Vytvoří objekt. |
packaged_task::~packaged_task Destruktor | packaged_task Zničí objekt. |
Veřejné metody
Název | Popis |
---|---|
get_future | Vrátí budoucí objekt, který má stejný asynchronní stav. |
make_ready_at_thread_exit | Volá volatelný objekt, který je uložen v přidruženém asynchronním stavu a atomicky ukládá vrácenou hodnotu. |
resetovat | Nahradí přidružený asynchronní stav. |
vyměnit | Vymění přidružený asynchronní stav se zadaným objektem. |
platný | Určuje, zda objekt má přidružený asynchronní stav. |
Veřejné operátory
Název | Popis |
---|---|
packaged_task::operator= | Přenese přidružený asynchronní stav ze zadaného objektu. |
packaged_task::operator() | Volá volatelný objekt, který je uložen v přidruženém asynchronním stavu, atomicky ukládá vrácenou hodnotu a nastaví stav připravený. |
packaged_task::operator bool | Určuje, zda objekt má přidružený asynchronní stav. |
Požadavky
Header:<future>
Obor názvů: std
packaged_task::get_future
Vrátí objekt typu future<Ty>
, který má stejný přidružený asynchronní stav.
future<Ty> get_future();
Poznámky
packaged_task
Pokud objekt nemá přidružený asynchronní stav, tato metoda vyvolá future_error, který má kód no_state
chyby .
Pokud tato metoda již byla volána pro packaged_task
objekt, který má stejný přidružený asynchronní stav, metoda vyvolá future_error
, který má kód future_already_retrieved
chyby .
packaged_task::make_ready_at_thread_exit
Volá volatelný objekt, který je uložen v přidruženém asynchronním stavu a atomicky ukládá vrácenou hodnotu.
void make_ready_at_thread_exit(ArgTypes... args);
Poznámky
packaged_task
Pokud objekt nemá přidružený asynchronní stav, tato metoda vyvolá future_error, který má kód no_state
chyby .
Pokud je tato metoda nebo make_ready_at_thread_exit již volána pro packaged_task
objekt, který má stejný přidružený asynchronní stav, metoda vyvolá future_error
chybu s kódem promise_already_satisfied
chyby .
Jinak tento operátor volá INVOKE(fn, args..., Ty)
, kde fn je volatelný objekt, který je uložen v přidruženém asynchronním stavu. Jakákoli vrácená hodnota se ukládá atomicky jako vrácený výsledek přidruženého asynchronního stavu.
Na rozdíl od packaged_task::operator() není přidružený asynchronní stav nastaven na ready
, dokud nebudou zničeny všechny objekty thread-local ve volajícím vlákně. Vlákna blokovaná v přidruženém asynchronním stavu se obvykle odblokují, dokud volající vlákno neukončí.
packaged_task::operator=
Přenese přidružený asynchronní stav ze zadaného objektu.
packaged_task& operator=(packaged_task&& Right);
Parametry
Right
Objekt packaged_task
.
Návratová hodnota
*this
Poznámky
Po operaci už nemá funkce Right přidružený asynchronní stav.
packaged_task::operator()
Volá volatelný objekt, který je uložen v přidruženém asynchronním stavu, atomicky ukládá vrácenou hodnotu a nastaví stav připravený.
void operator()(ArgTypes... args);
Poznámky
packaged_task
Pokud objekt nemá přidružený asynchronní stav, tato metoda vyvolá future_error, který má kód no_state
chyby .
Pokud je tato metoda nebo make_ready_at_thread_exit již volána pro packaged_task
objekt, který má stejný přidružený asynchronní stav, metoda vyvolá future_error
chybu s kódem promise_already_satisfied
chyby .
Jinak tento operátor volá INVOKE(fn, args..., Ty)
, kde fn je volatelný objekt, který je uložen v přidruženém asynchronním stavu. Jakákoli vrácená hodnota je uložena atomicky jako vrácený výsledek přidruženého asynchronního stavu a stav je nastaven na připraveno. V důsledku toho se všechna vlákna blokovaná v přidruženém asynchronním stavu odblokují.
packaged_task::operator bool
Určuje, zda objekt má .associated asynchronous state
operator bool() const noexcept;
Návratová hodnota
true
pokud má objekt přidružený asynchronní stav; v opačném případě . false
packaged_task::p ackaged_task – konstruktor
packaged_task
Vytvoří objekt.
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);
Parametry
Right
Objekt packaged_task
.
aloka
Alokátor paměti. Další informace najdete v tématu <alokátory>.
Fn
Objekt funkce.
Poznámky
První konstruktor vytvoří packaged_task
objekt, který nemá přidružený asynchronní stav.
Druhý konstruktor vytvoří packaged_task
objekt a přenese přidružený asynchronní stav zprava. Po operaci už nemá funkce Right přidružený asynchronní stav.
Třetí konstruktor vytvoří packaged_task
objekt, který má kopii fn uloženou v přidruženém asynchronním stavu.
Čtvrtý konstruktor vytvoří packaged_task
objekt, který má kopii fn uloženou v přidruženém asynchronním stavu a používá alloc
k přidělení paměti.
packaged_task::~packaged_task Destruktor
packaged_task
Zničí objekt.
~packaged_task();
Poznámky
Pokud přidružený asynchronní stav není připravený, destruktor uloží future_error výjimku, která má kód broken_promise
chyby v důsledku přidruženého asynchronního stavu a všechna vlákna blokovaná v přidruženém asynchronním stavu se odblokují.
packaged_task::reset
Použije nový přidružený asynchronní stav k nahrazení existujícího přidruženého asynchronního stavu.
void reset();
Poznámky
Tato metoda se spustí *this = packaged_task(move(fn))
, kde fn je objekt funkce, který je uložen v přidruženém asynchronním stavu pro tento objekt. Stav objektu je proto vymazán a get_future, operator() a make_ready_at_thread_exit lze volat jako u nově vytvořeného objektu.
packaged_task::swap
Vymění přidružený asynchronní stav se zadaným objektem.
void swap(packaged_task& Right) noexcept;
Parametry
Right
Objekt packaged_task
.
packaged_task::valid
Určuje, zda objekt má .associated asynchronous state
bool valid() const;
Návratová hodnota
true
pokud má objekt přidružený asynchronní stav; v opačném případě . false