packaged_task — Klasa
Opisuje asynchronicznego dostawcę, który jest otoką wywołań, którego podpis wywołania to Ty(ArgTypes...)
. Jego skojarzony stan asynchroniczny zawiera kopię jego wywoływanego obiektu oprócz potencjalnego wyniku.
Składnia
template <class>
class packaged_task;
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
packaged_task | packaged_task Tworzy obiekt. |
packaged_task::~packaged_task Destruktor | packaged_task Niszczy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
get_future | Zwraca przyszły obiekt, który ma ten sam skojarzony stan asynchroniczny. |
make_ready_at_thread_exit | Wywołuje obiekt wywoływany przechowywany w skojarzonym stanie asynchronicznym i niepodzieal przechowuje zwracaną wartość. |
resetować | Zastępuje skojarzony stan asynchroniczny. |
zamiana | Wymienia skojarzony stan asynchroniczny z określonym obiektem. |
ważny | Określa, czy obiekt ma skojarzony stan asynchroniczny. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
packaged_task::operator= | Transferuje skojarzony stan asynchroniczny z określonego obiektu. |
packaged_task::operator() | Wywołuje obiekt, który jest przechowywany w skojarzonym stanie asynchronicznym, niepodzieal przechowuje zwracaną wartość i ustawia stan na gotowy. |
packaged_task::operator bool | Określa, czy obiekt ma skojarzony stan asynchroniczny. |
Wymagania
Nagłówek:<przyszłość>
Przestrzeń nazw: std
packaged_task::get_future
Zwraca obiekt typu future<Ty>
, który ma taki sam skojarzony stan asynchroniczny.
future<Ty> get_future();
Uwagi
packaged_task
Jeśli obiekt nie ma skojarzonego stanu asynchronicznego, ta metoda zgłasza future_error z kodem błędu no_state
.
Jeśli ta metoda została już wywołana dla packaged_task
obiektu, który ma taki sam skojarzony stan asynchroniczny, metoda zgłasza future_error
kod future_already_retrieved
błędu .
packaged_task::make_ready_at_thread_exit
Wywołuje obiekt wywoływany przechowywany w skojarzonym stanie asynchronicznym i niepodzieal przechowuje zwracaną wartość.
void make_ready_at_thread_exit(ArgTypes... args);
Uwagi
packaged_task
Jeśli obiekt nie ma skojarzonego stanu asynchronicznego, ta metoda zgłasza future_error z kodem błędu no_state
.
Jeśli ta metoda lub make_ready_at_thread_exit została już wywołana dla packaged_task
obiektu, który ma ten sam skojarzony stan asynchroniczny, metoda zgłasza future_error
kod promise_already_satisfied
błędu .
W przeciwnym razie ten operator wywołuje INVOKE(fn, args..., Ty)
metodę , gdzie fn jest obiektem wywoływanym przechowywanym w skojarzonym stanie asynchronicznym. Każda zwrócona wartość jest przechowywana niepodziecznie jako zwrócony wynik skojarzonego stanu asynchronicznego.
W przeciwieństwie do packaged_task::operator(), skojarzony stan asynchroniczny nie jest ustawiany do ready
momentu zniszczenia wszystkich obiektów lokalnych wątku w wątku wywołującym. Zazwyczaj wątki, które są blokowane w skojarzonym stanie asynchronicznym, nie są odblokowane, dopóki wątek wywołujący nie zostanie zamknięty.
packaged_task::operator=
Przenosi skojarzony stan asynchroniczny z określonego obiektu.
packaged_task& operator=(packaged_task&& Right);
Parametry
Right
Obiekt packaged_task
.
Wartość zwracana
*this
Uwagi
Po operacji right nie ma już skojarzonego stanu asynchronicznego.
packaged_task::operator()
Wywołuje obiekt, który jest przechowywany w skojarzonym stanie asynchronicznym, niepodzieal przechowuje zwracaną wartość i ustawia stan na gotowy.
void operator()(ArgTypes... args);
Uwagi
packaged_task
Jeśli obiekt nie ma skojarzonego stanu asynchronicznego, ta metoda zgłasza future_error z kodem błędu no_state
.
Jeśli ta metoda lub make_ready_at_thread_exit została już wywołana dla packaged_task
obiektu, który ma ten sam skojarzony stan asynchroniczny, metoda zgłasza future_error
kod promise_already_satisfied
błędu .
W przeciwnym razie ten operator wywołuje INVOKE(fn, args..., Ty)
metodę , gdzie fn jest obiektem wywoływanym przechowywanym w skojarzonym stanie asynchronicznym. Każda zwrócona wartość jest przechowywana niepodziecznie jako zwrócony wynik skojarzonego stanu asynchronicznego, a stan jest ustawiony na gotowy. W związku z tym wszystkie wątki, które są blokowane w skojarzonym stanie asynchronicznym, stają się odblokowane.
packaged_task::operator bool
Określa, czy obiekt ma obiekt associated asynchronous state
.
operator bool() const noexcept;
Wartość zwracana
true
jeśli obiekt ma skojarzony stan asynchroniczny; w przeciwnym razie, false
.
packaged_task::p ackaged_task, konstruktor
packaged_task
Tworzy obiekt.
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
Obiekt packaged_task
.
alloc
Alokator pamięci. Aby uzyskać więcej informacji, zobacz alokatory>.<
Fn
Obiekt funkcyjny.
Uwagi
Pierwszy konstruktor tworzy packaged_task
obiekt, który nie ma skojarzonego stanu asynchronicznego.
Drugi konstruktor konstruuje packaged_task
obiekt i przenosi skojarzony stan asynchroniczny z prawej. Po operacji right nie ma już skojarzonego stanu asynchronicznego.
Trzeci konstruktor konstruuje packaged_task
obiekt, który ma kopię fn przechowywaną w skojarzonym stanie asynchronicznym.
Czwarty konstruktor tworzy packaged_task
obiekt, który ma kopię fn przechowywaną w skojarzonym stanie asynchronicznym i używa alloc
go do alokacji pamięci.
packaged_task::~packaged_task Destruktor
packaged_task
Niszczy obiekt.
~packaged_task();
Uwagi
Jeśli skojarzony stan asynchroniczny nie jest gotowy, destruktor przechowuje wyjątek future_error, który zawiera kod broken_promise
błędu w wyniku skojarzonego stanu asynchronicznego, a wszystkie wątki, które są blokowane w skojarzonym stanie asynchronicznym, stają się odblokowane.
packaged_task::reset
Używa nowego skojarzonego stanu asynchronicznego, aby zastąpić istniejący skojarzony stan asynchroniczny.
void reset();
Uwagi
W efekcie *this = packaged_task(move(fn))
ta metoda wykonuje metodę , gdzie fn jest obiektem funkcji przechowywanym w skojarzonym stanie asynchronicznym dla tego obiektu. W związku z tym stan obiektu jest czyszczone, a get_future, operator() i make_ready_at_thread_exit można wywołać tak, jakby na nowo skonstruowanym obiekcie.
packaged_task::swap
Wymienia skojarzony stan asynchroniczny z określonym obiektem.
void swap(packaged_task& Right) noexcept;
Parametry
Right
Obiekt packaged_task
.
packaged_task::valid
Określa, czy obiekt ma obiekt associated asynchronous state
.
bool valid() const;
Wartość zwracana
true
jeśli obiekt ma skojarzony stan asynchroniczny; w przeciwnym razie, false
.