Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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_statechyby .
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_retrievedchyby .
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_statechyby .
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_satisfiedchyby .
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_statechyby .
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_satisfiedchyby .
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
truepokud 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
truepokud má objekt přidružený asynchronní stav; v opačném případě . false