task_group-Klasse
Die task_group
-Klasse stellt eine Auflistung der parallelen Arbeit dar, auf die gewartet oder die abgebrochen werden kann.
Syntax
class task_group;
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
task_group | Überladen. Erstellt ein neues task_group -Objekt. |
~task_group Destruktor | Zerstört ein task_group -Objekt. Es wird erwartet, dass Sie die Methode oder run_and_wait die Methode wait für das Objekt vor dem Ausführen des Destruktors aufrufen, es sei denn, der Destruktor wird aufgrund einer Ausnahme als Ergebnis der Stapelaussetzung ausgeführt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
cancel | Es wird versucht, die Unterstruktur der Arbeit abzubrechen, die in dieser Aufgabengruppe verwurzelt ist. Alle vorgänge, die für die Vorgangsgruppe geplant sind, werden nach Möglichkeit transitiv abgebrochen. |
is_canceling | Informiert den Anrufer darüber, ob sich die Aufgabengruppe derzeit mitten in einer Abbruchzeit befindet. Dies weist nicht unbedingt darauf hin, dass die cancel Methode für das task_group Objekt aufgerufen wurde (obwohl diese Methode sicherlich für die Rückgabe true qualifiziert). Es kann vorkommen, dass das task_group Objekt inline ausgeführt wird und eine Aufgabengruppe weiter oben in der Arbeitsstruktur abgebrochen wurde. In Fällen wie diesen, in denen die Laufzeit vor dem Ablauf des Abbruchs durch dieses task_group Objekt bestimmen kann, true wird ebenfalls zurückgegeben. |
run | Überladen. Plant einen Vorgang für das task_group Objekt. Wenn ein task_handle Objekt als Parameter run übergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich. Die Version der Methode, die einen Verweis auf ein Funktionsobjekt als Parameter verwendet, umfasst die Heap-Zuordnung innerhalb der Laufzeit, die möglicherweise weniger gut funktioniert als die Verwendung der Version, die einen Verweis auf ein task_handle Objekt verwendet. Die Version, die den Parameter _Placement verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort voreingenommen wird. |
run_and_wait | Überladen. Plant, dass eine Aufgabe im Aufrufkontext inline ausgeführt wird, wobei das Objekt unterstützung task_group für die vollständige Abbruchunterstützung unterstützt. Die Funktion wartet dann, bis alle Arbeiten task_group am Objekt abgeschlossen oder abgebrochen wurden. Wenn ein task_handle Objekt als Parameter run_and_wait übergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle Objekts verantwortlich. |
wait | Wartet, bis alle Arbeiten am task_group Objekt abgeschlossen oder abgebrochen wurden. |
Hinweise
Im Gegensatz zur stark eingeschränkten structured_task_group
Klasse ist die task_group
Klasse viel allgemeiner. Sie hat keine der von structured_task_group beschriebenen Einschränkungen. task_group
Objekte können sicher über Threads hinweg verwendet und auf freiformfähige Weise verwendet werden. Der Nachteil des task_group
Konstrukts besteht darin, dass es nicht so gut wie das structured_task_group
Konstrukt für Vorgänge ausgeführt werden kann, die kleine Arbeitsmengen ausführen.
Weitere Informationen finden Sie unter Task Parallelism.
Vererbungshierarchie
task_group
Anforderungen
Kopfzeile: ppl.h
Namespace: Parallelität
cancel
Es wird versucht, die Unterstruktur der Arbeit abzubrechen, die in dieser Aufgabengruppe verwurzelt ist. Alle vorgänge, die für die Vorgangsgruppe geplant sind, werden nach Möglichkeit transitiv abgebrochen.
void cancel();
Hinweise
Weitere Informationen finden Sie unter "Stornierung".
is_canceling
Informiert den Anrufer darüber, ob sich die Aufgabengruppe derzeit mitten in einer Abbruchzeit befindet. Dies weist nicht unbedingt darauf hin, dass die cancel
Methode für das task_group
Objekt aufgerufen wurde (obwohl diese Methode sicherlich für die Rückgabe true
qualifiziert). Es kann vorkommen, dass das task_group
Objekt inline ausgeführt wird und eine Aufgabengruppe weiter oben in der Arbeitsstruktur abgebrochen wurde. In Fällen wie diesen, in denen die Laufzeit vor dem Ablauf des Abbruchs durch dieses task_group
Objekt bestimmen kann, true
wird ebenfalls zurückgegeben.
bool is_canceling();
Rückgabewert
Ein Hinweis darauf, ob sich das task_group
Objekt mitten in einer Stornierung befindet (oder kurz darauf garantiert ist).
Hinweise
Weitere Informationen finden Sie unter "Stornierung".
run
Plant einen Vorgang für das task_group
Objekt. Wenn ein task_handle
Objekt als Parameter run
übergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle
Objekts verantwortlich. Die Version der Methode, die einen Verweis auf ein Funktionsobjekt als Parameter verwendet, umfasst die Heap-Zuordnung innerhalb der Laufzeit, die möglicherweise weniger gut funktioniert als die Verwendung der Version, die einen Verweis auf ein task_handle
Objekt verwendet. Die Version, die den Parameter _Placement
verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort voreingenommen wird.
template<
typename _Function
>
void run(
const _Function& _Func
);
template<
typename _Function
>
void run(
const _Function& _Func,
location& _Placement
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement
);
Parameter
_Funktion
Der Typ des Funktionsobjekts, das aufgerufen wird, um den Textkörper des Aufgabenhandle auszuführen.
_Func
Eine Funktion, die aufgerufen wird, um den Textkörper der Aufgabe aufzurufen. Dies kann ein Lambda-Ausdruck oder ein anderes Objekt sein, das eine Version des Funktionsaufrufoperators mit der Signatur void operator()()
unterstützt.
_Platzierung
Ein Verweis auf den Speicherort, an dem die durch den _Func
Parameter dargestellte Aufgabe ausgeführt werden soll.
_Task_handle
Ein Handle für die geplante Arbeit. Beachten Sie, dass der Aufrufer für die Lebensdauer dieses Objekts verantwortlich ist. Die Laufzeit erwartet weiterhin, dass sie aktiv ist, bis die Methode oder run_and_wait
die wait
Methode für dieses task_group
Objekt aufgerufen wurde.
Hinweise
Die Laufzeit plant die bereitgestellte Arbeitsfunktion, die zu einem späteren Zeitpunkt ausgeführt werden soll, was nach dem Zurückgeben der aufrufenden Funktion erfolgen kann. Diese Methode verwendet ein task_handle-Objekt , um eine Kopie der bereitgestellten Arbeitsfunktion zu enthalten. Daher werden alle Zustandsänderungen, die in einem Funktionsobjekt auftreten, das Sie an diese Methode übergeben, nicht in Ihrer Kopie dieses Funktionsobjekts angezeigt. Stellen Sie außerdem sicher, dass die Lebensdauer aller Objekte, die Sie per Zeiger oder verweis auf die Arbeitsfunktion übergeben, gültig bleiben, bis die Arbeitsfunktion zurückgegeben wird.
Wenn die task_group
Destruktierung als Ergebnis der Abkopplung von Stapeln von einer Ausnahme ausfällt, müssen Sie nicht garantieren, dass ein Aufruf an die wait
Methode oder run_and_wait
die Methode erfolgt ist. In diesem Fall wird der Destruktor ordnungsgemäß abbrechen und warten, bis die Aufgabe, die durch den _Task_handle
Parameter dargestellt wird, abgeschlossen ist.
Die Methode löst eine invalid_multiple_scheduling Ausnahme aus, wenn der vom _Task_handle
Parameter angegebene Vorgangshandle bereits über die run
Methode auf ein Aufgabengruppenobjekt geplant wurde und es keinen dazwischen liegenden Aufruf der wait
Aufgabe oder run_and_wait
Methode für diese Aufgabengruppe gab.
run_and_wait
Plant, dass eine Aufgabe im Aufrufkontext inline ausgeführt wird, wobei das Objekt unterstützung task_group
für die vollständige Abbruchunterstützung unterstützt. Die Funktion wartet dann, bis alle Arbeiten task_group
am Objekt abgeschlossen oder abgebrochen wurden. Wenn ein task_handle
Objekt als Parameter run_and_wait
übergeben wird, ist der Aufrufer für die Verwaltung der Lebensdauer des task_handle
Objekts verantwortlich.
template<
class _Function
>
task_group_status run_and_wait(
task_handle<_Function>& _Task_handle
);
template<
class _Function
>
task_group_status run_and_wait(
const _Function& _Func
);
Parameter
_Funktion
Der Typ des Funktionsobjekts, das aufgerufen wird, um den Textkörper der Aufgabe auszuführen.
_Task_handle
Ein Handle für die Aufgabe, die im aufrufenden Kontext inline ausgeführt wird. Beachten Sie, dass der Aufrufer für die Lebensdauer dieses Objekts verantwortlich ist. Die Laufzeit erwartet weiterhin, dass sie bis zum Abschluss der Ausführung der run_and_wait
Methode live ist.
_Func
Eine Funktion, die aufgerufen wird, um den Textkörper der Arbeit aufzurufen. Dies kann ein Lambda-Ausdruck oder ein anderes Objekt sein, das eine Version des Funktionsaufrufoperators mit der Signatur void operator()()
unterstützt.
Rückgabewert
Ein Hinweis darauf, ob die Wartezeit erfüllt oder die Aufgabengruppe abgebrochen wurde, aufgrund eines expliziten Abbruchvorgangs oder einer Ausnahme, die von einem seiner Aufgaben ausgelöst wird. Weitere Informationen finden Sie unter task_group_status.
Hinweise
Beachten Sie, dass eine oder mehrere der für dieses task_group
Objekt geplanten Aufgaben inline im aufrufenden Kontext ausgeführt werden können.
Wenn mindestens eine der für dieses task_group
Objekt geplanten Aufgaben eine Ausnahme auslöst, wählt die Laufzeit eine solche Ausnahme der Auswahl aus und verteilt sie aus dem Aufruf der run_and_wait
Methode.
Wenn die run_and_wait
Methode für ein task_group
Objekt zurückgegeben wird, setzt die Laufzeit das Objekt auf einen sauberen Zustand zurück, in dem es wiederverwendet werden kann. Dies schließt den Fall ein, in dem das task_group
Objekt abgebrochen wurde.
Im nicht außergewöhnlichen Ausführungspfad verfügen Sie über ein Mandat, entweder diese Methode oder die wait
Methode vor dem Destruktor der task_group
Ausgeführten aufzurufen.
task_group
Erstellt ein neues task_group
-Objekt.
task_group();
task_group(
cancellation_token _CancellationToken
);
Parameter
_CancellationToken
Ein Abbruchtoken, das dieser Aufgabengruppe zugeordnet werden soll. Die Aufgabengruppe wird abgebrochen, wenn das Token abgebrochen wird.
Hinweise
Der Konstruktor, der ein Abbruchtoken akzeptiert, erstellt ein task_group
Abbruchtoken, das abgebrochen wird, wenn die dem Token zugeordnete Quelle abgebrochen wird. Wenn Sie ein explizites Abbruchtoken bereitstellen, wird diese Aufgabengruppe auch davon isoliert, an einem impliziten Abbruch von einer übergeordneten Gruppe mit einem anderen Token oder keinem Token teilzunehmen.
~task_group
Zerstört ein task_group
-Objekt. Es wird erwartet, dass Sie die Methode oder run_and_wait
die Methode wait
für das Objekt vor dem Ausführen des Destruktors aufrufen, es sei denn, der Destruktor wird aufgrund einer Ausnahme als Ergebnis der Stapelaussetzung ausgeführt.
~task_group();
Hinweise
Wenn der Destruktor als Ergebnis der normalen Ausführung ausgeführt wird (z. B. nicht stapeln sie aufgrund einer Ausnahme), und weder die methoden noch die wait
Methoden aufgerufen wurden, kann der Destruktor eine missing_wait Ausnahme run_and_wait
auslösen.
wait
Wartet, bis alle Arbeiten am task_group
Objekt abgeschlossen oder abgebrochen wurden.
task_group_status wait();
Rückgabewert
Ein Hinweis darauf, ob die Wartezeit erfüllt oder die Aufgabengruppe abgebrochen wurde, aufgrund eines expliziten Abbruchvorgangs oder einer Ausnahme, die von einem seiner Aufgaben ausgelöst wird. Weitere Informationen finden Sie unter task_group_status.
Hinweise
Beachten Sie, dass eine oder mehrere der für dieses task_group
Objekt geplanten Aufgaben inline im aufrufenden Kontext ausgeführt werden können.
Wenn mindestens eine der für dieses task_group
Objekt geplanten Aufgaben eine Ausnahme auslöst, wählt die Laufzeit eine solche Ausnahme der Auswahl aus und verteilt sie aus dem Aufruf der wait
Methode.
Das Aufrufen wait
eines task_group
Objekts setzt es auf einen sauberen Zustand zurück, in dem es wiederverwendet werden kann. Dies schließt den Fall ein, in dem das task_group
Objekt abgebrochen wurde.
Im nicht außergewöhnlichen Ausführungspfad verfügen Sie über ein Mandat, entweder diese Methode oder die run_and_wait
Methode vor dem Destruktor der task_group
Ausgeführten aufzurufen.
Siehe auch
Concurrency-Namespace
structured_task_group-Klasse
task_handle-Klasse