packaged_task-Klasse
Beschreibt einen asynchronen Anbieter, der ein Aufrufwrapper und dessen Aufrufsignatur Ty(ArgTypes...)
ist. Der zugehörige asynchrone Zustand enthält zusätzlich zum potentiellen Ergebnis eine Kopie des aufrufbaren Objekts.
Syntax
template <class>
class packaged_task;
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
packaged_task | Erstellt ein packaged_task -Objekt. |
packaged_task::~packaged_task-Destruktor | Zerstört ein packaged_task -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
get_future | Gibt ein future-Objekt zurück, das über den gleichen zugeordneten asynchronen Zustand verfügt. |
make_ready_at_thread_exit | Ruft das aufrufbare Objekt auf, das im zugeordneten asynchronen Zustand gespeichert ist und den Rückgabewert atomar speichert. |
reset | Ersetzt den zugeordneten asynchronen Zustand. |
swap | Wechselt den zugeordneten asynchronen Zustand mit einem angegebenen Objekt. |
gültig | Gibt an, ob das Objekt einen zugeordneten asynchronen Zustand hat. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
packaged_task::operator= | Überträgt einen zugeordneten asynchronen Zustand aus einem angegebenen Objekt. |
packaged_task::operator() | Ruft das aufrufbare Objekt auf, das im zugeordneten asynchronen Zustand gespeichert ist, speichert den zurückgegebenen Wert atomar und legt den Zustand auf bereit fest. |
packaged_task::operator bool | Gibt an, ob das Objekt einen zugeordneten asynchronen Zustand hat. |
Anforderungen
Header:<future>
Namespace: std
packaged_task::get_future
Gibt ein future<Ty>
-Objekt zurück, das über den gleichen zugeordneten asynchronen Zustand verfügt.
future<Ty> get_future();
Hinweise
Wenn das packaged_task
-Objekt über keinen zugeordneten asynchronen Zustand verfügt, löst diese Methode future_error mit einem Fehlercode von no_state
aus.
Wenn diese Methode bereits für ein packaged_task
-Objekt mit dem gleichen zugeordneten asynchronen Zustand aufgerufen wurde, löst die Methode ein future_error
mit einem Fehlercode von future_already_retrieved
aus.
packaged_task::make_ready_at_thread_exit
Ruft das aufrufbare Objekt auf, das im zugeordneten asynchronen Zustand gespeichert ist und den Rückgabewert atomar speichert.
void make_ready_at_thread_exit(ArgTypes... args);
Hinweise
Wenn das packaged_task
-Objekt über keinen zugeordneten asynchronen Zustand verfügt, löst diese Methode future_error mit einem Fehlercode von no_state
aus.
Wenn diese Methode oder make_ready_at_thread_exit bereits für ein packaged_task
-Objekt mit dem gleichen zugeordneten asynchronen Zustand aufgerufen wurde, löst die Methode ein future_error
mit einem Fehlercode von promise_already_satisfied
aus.
Andernfalls ruft dieser Operator INVOKE(fn, args..., Ty)
auf, in dem fn das aufrufbare Objekt ist, das im zugeordneten asynchronen Zustand gespeichert ist. Jeder Rückgabewert wird atomar als das zurückgegebene Ergebnis des assoziierten asynchronen Zustands gespeichert.
Im Gegensatz zu packaged_task::operator(), wird der zugeordnete asynchrone Zustand erst festgelegt ready
, nachdem alle threadlokalen Objekte im aufrufenden Thread zerstört wurden. In der Regel werden Threads, die für den zugeordneten asynchronen Zustand blockiert sind, erst aufgehoben, wenn der aufrufende Thread beendet wird.
packaged_task::operator=
Überträgt den zugeordneten asynchronen Zustand aus einem angegebenen Objekt.
packaged_task& operator=(packaged_task&& Right);
Parameter
Right
Ein packaged_task
-Objekt.
Rückgabewert
*this
Bemerkungen
Nach dem Vorgang verfügt Right nicht mehr über einen zugeordneten asynchronen Zustand.
packaged_task::operator()
Ruft das aufrufbare Objekt auf, das im zugeordneten asynchronen Zustand gespeichert ist, den Rückgabewert atomar speichert und den Zustand auf bereit festlegt.
void operator()(ArgTypes... args);
Hinweise
Wenn das packaged_task
-Objekt über keinen zugeordneten asynchronen Zustand verfügt, löst diese Methode future_error mit einem Fehlercode von no_state
aus.
Wenn diese Methode oder make_ready_at_thread_exit bereits für ein packaged_task
-Objekt mit dem gleichen zugeordneten asynchronen Zustand aufgerufen wurde, löst die Methode ein future_error
mit einem Fehlercode von promise_already_satisfied
aus.
Andernfalls ruft dieser Operator INVOKE(fn, args..., Ty)
auf, in dem fn das aufrufbare Objekt ist, das im zugeordneten asynchronen Zustand gespeichert ist. Alle Rückgabewerte werden als das zurückgegebene Ergebnis des assoziierten asynchronen Zustands atomar gespeichert wird, und der Status wird auf bereit festgelegt. Deshalb wird die Blockierung aller Threads, die auf dem zugeordneten asynchronen Zustand blockiert werden, aufgehoben.
packaged_task::operator bool
Gibt an, ob das Objekt über associated asynchronous state
verfügt.
operator bool() const noexcept;
Rückgabewert
true
, wenn das Objekt einen zugeordneten asynchronen Zustand hat; andernfalls false
.
packaged_task::packaged_task-Konstruktor
Erstellt ein packaged_task
-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);
Parameter
Right
Ein packaged_task
-Objekt.
alloc
Eine Speicherbelegung. Weitere Informationen finden Sie unter <"Allocators>".
Fn
Ein Funktionsobjekt.
Hinweise
Der erste Konstruktor erstellt ein packaged_task
-Objekt, das über keinen zugeordneten asynchronen Zustand verfügt.
Der zweite Konstruktor erstellt ein packaged_task
Objekt und überträgt den zugeordneten asynchronen Zustand von Rechts. Nach dem Vorgang verfügt Right nicht mehr über einen zugeordneten asynchronen Zustand.
Der dritte Konstruktor erstellt ein packaged_task
Objekt, das eine Kopie von fn enthält, die im zugeordneten asynchronen Zustand gespeichert ist.
Der vierte Konstruktor erstellt ein packaged_task
Objekt, das eine Kopie von fn enthält, die im zugeordneten asynchronen Zustand gespeichert ist und für die Speicherzuweisung verwendet wird alloc
.
packaged_task::~packaged_task-Destruktor
Zerstört ein packaged_task
-Objekt.
~packaged_task();
Hinweise
Wenn der zugeordnete asynchrone Zustand nicht bereit ist, speichert der Destruktor eine future_error Ausnahme, die einen Fehlercode broken_promise
als Ergebnis im zugeordneten asynchronen Zustand aufweist, und alle Threads, die für den zugeordneten asynchronen Zustand blockiert werden, werden entsperrt.
packaged_task::reset
Verwendet einen neuen zugeordneten asynchronen Zustand zum Ersetzen des vorhandenen zugeordneten asynchronen Zustands.
void reset();
Hinweise
Diese Methode führt tatsächlich *this = packaged_task(move(fn))
aus, wobei fn das Funktionsobjekt ist, das im zugeordneten asynchronen Zustand dieses Objekts gespeichert ist. Daher wird der Status des Objekts gelöscht, und get_future, operator(), und make_ready_at_thread_exit können aufgerufen werden, als wäre es für ein neu erstelltes Objekt.
packaged_task::swap
Wechselt den zugeordneten asynchronen Zustand mit einem angegebenen Objekt.
void swap(packaged_task& Right) noexcept;
Parameter
Right
Ein packaged_task
-Objekt.
packaged_task::valid
Gibt an, ob das Objekt über associated asynchronous state
verfügt.
bool valid() const;
Rückgabewert
true
, wenn das Objekt einen zugeordneten asynchronen Zustand hat; andernfalls false
.