Sdílet prostřednictvím


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_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

Viz také

Referenční informace k souborům hlaviček
<budoucnost>