Teilen über


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.

Siehe auch

Headerdateienreferenz
<future>