task_group – třída
Třída task_group
představuje kolekci paralelních prací, na které lze čekat nebo zrušit.
Syntaxe
class task_group;
Členové
Veřejné konstruktory
Název | Popis |
---|---|
task_group | Přetíženo. Vytvoří nový task_group objekt. |
~task_group Destruktor | task_group Zničí objekt. Očekává se, wait že zavoláte objekt nebo run_and_wait metodu před spuštěním destruktoru, pokud se destruktor nespouštějí v důsledku odvíjení zásobníku kvůli výjimce. |
Veřejné metody
Název | Popis |
---|---|
zrušit | Snaží se zrušit dílčí strom práce v této skupině úloh. Pokud je to možné, zruší se každý úkol naplánovaný ve skupině úloh. |
is_canceling | Informuje volajícího, zda je skupina úkolů právě uprostřed zrušení. To nemusí nutně znamenat, že cancel metoda byla volána na task_group objekt (ačkoli to jistě kvalifikuje tuto metodu k vrácení true ). Může se jednat o případ, že task_group se objekt spouští v textu a skupina úloh dále v pracovním stromu byla zrušena. V případech, kdy modul runtime může předem určit, že zrušení projde tímto task_group objektem, true se vrátí také. |
Spusťte | Přetíženo. Naplánuje úkol na objektu task_group . task_handle Pokud je objekt předán jako parametr run , volající je zodpovědný za správu životnosti objektutask_handle . Verze metody, která přebírá odkaz na objekt funkce jako parametr zahrnuje přidělení haldy uvnitř modulu runtime, což může být méně dobře než použití verze, která přebírá odkaz na task_handle objekt. Verze, která přebírá parametr _Placement , způsobí, že úloha bude zkreslená vůči spuštění v umístění určeném tímto parametrem. |
run_and_wait | Přetíženo. Naplánuje úlohu tak, aby byla spuštěna v kontextu volání s pomocí objektu task_group pro plnou podporu zrušení. Funkce pak počká, dokud se nedokončí nebo zruší všechna práce na objektu task_group . task_handle Pokud je objekt předán jako parametr run_and_wait , volající je zodpovědný za správu životnosti objektutask_handle . |
Počkej | Počká, dokud se nedokončí nebo zruší všechna práce na objektu task_group . |
Poznámky
Na rozdíl od silně omezené structured_task_group
třídy je třída task_group
mnohem obecnější konstrukce. Nemá žádná omezení popsaná structured_task_group. task_group
objekty mohou být bezpečně používány napříč vlákny a využívány volnými způsoby. Nevýhodou konstruktoru task_group
je, že nemusí fungovat stejně jako structured_task_group
konstruktor pro úkoly, které provádějí malé množství práce.
Další informace naleznete v tématu Paralelismus úkolu.
Hierarchie dědičnosti
task_group
Požadavky
Hlavička: ppl.h
Namespace: souběžnost
zrušit
Snaží se zrušit dílčí strom práce v této skupině úloh. Pokud je to možné, zruší se každý úkol naplánovaný ve skupině úloh.
void cancel();
Poznámky
Další informace najdete v tématu Zrušení.
is_canceling
Informuje volajícího, zda je skupina úkolů právě uprostřed zrušení. To nemusí nutně znamenat, že cancel
metoda byla volána na task_group
objekt (ačkoli to jistě kvalifikuje tuto metodu k vrácení true
). Může se jednat o případ, že task_group
se objekt spouští v textu a skupina úloh dále v pracovním stromu byla zrušena. V případech, kdy modul runtime může předem určit, že zrušení projde tímto task_group
objektem, true
se vrátí také.
bool is_canceling();
Návratová hodnota
Označení, zda task_group
je objekt uprostřed zrušení (nebo je zaručen krátce).
Poznámky
Další informace najdete v tématu Zrušení.
příkaz Run
Naplánuje úkol na objektu task_group
. task_handle
Pokud je objekt předán jako parametr run
, volající je zodpovědný za správu životnosti objektutask_handle
. Verze metody, která přebírá odkaz na objekt funkce jako parametr zahrnuje přidělení haldy uvnitř modulu runtime, což může být méně dobře než použití verze, která přebírá odkaz na task_handle
objekt. Verze, která přebírá parametr _Placement
, způsobí, že úloha bude zkreslená vůči spuštění v umístění určeném tímto parametrem.
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
);
Parametry
_Funkce
Typ objektu funkce, který bude vyvolán ke spuštění textu popisovače úkolu.
_Func
Funkce, která bude volána k vyvolání textu úkolu. Může se jednat o výraz lambda nebo jiný objekt, který podporuje verzi operátoru volání funkce s podpisem void operator()()
.
_Umístění
Odkaz na umístění, kde by se měl provést úkol reprezentovaný parametrem _Func
.
_Task_handle
Popisovač naplánované práce Všimněte si, že volající zodpovídá za životnost tohoto objektu. Modul runtime bude nadále očekávat, že bude aktivní, dokud wait
run_and_wait
se tento task_group
objekt nebo metoda nevolá.
Poznámky
Modul runtime naplánuje zadanou pracovní funkci tak, aby běžela později, což může být po návratu volající funkce. Tato metoda používá objekt task_handle k uložení kopie poskytnuté pracovní funkce. Proto se všechny změny stavu, ke kterým dochází v objektu funkce, který předáte této metodě, nezobrazí ve vaší kopii tohoto objektu funkce. Kromě toho se ujistěte, že životnost všech objektů, které předáte ukazatelem nebo odkazem na pracovní funkci, zůstávají platné, dokud pracovní funkce nevrátí.
task_group
Pokud se destrukce v důsledku odvíjení zásobníku z výjimky, nemusíte zaručit, že volání bylo provedeno buď pro metodu, nebo run_and_wait
pro metoduwait
. V tomto případě destruktor odpovídajícím způsobem zruší a počká na dokončení úlohy reprezentované parametrem _Task_handle
.
Metoda vyvolá výjimku invalid_multiple_scheduling , pokud popisovač úkolu zadaný _Task_handle
parametrem již byl naplánován na objekt skupiny úloh prostřednictvím run
metody a nedošlo k žádnému volání wait
metody nebo run_and_wait
metody v této skupině úloh.
run_and_wait
Naplánuje úlohu tak, aby byla spuštěna v kontextu volání s pomocí objektu task_group
pro plnou podporu zrušení. Funkce pak počká, dokud se nedokončí nebo zruší všechna práce na objektu task_group
. task_handle
Pokud je objekt předán jako parametr run_and_wait
, volající je zodpovědný za správu životnosti objektutask_handle
.
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
);
Parametry
_Funkce
Typ objektu funkce, který bude vyvolán ke spuštění textu úkolu.
_Task_handle
Popisovač úlohy, která se spustí na řádku v kontextu volání. Všimněte si, že volající zodpovídá za životnost tohoto objektu. Modul runtime bude nadále očekávat, že bude aktivní, dokud run_and_wait
metoda nedokončí provádění.
_Func
Funkce, která bude volána k vyvolání těla práce. Může se jednat o výraz lambda nebo jiný objekt, který podporuje verzi operátoru volání funkce s podpisem void operator()()
.
Návratová hodnota
Označení, jestli bylo čekání splněné nebo jestli byla skupina úloh zrušena, a to buď kvůli explicitní operaci zrušení, nebo výjimce z některého z jejích úkolů. Další informace najdete v tématu task_group_status.
Poznámky
Všimněte si, že jeden nebo více úkolů naplánovaných na tento task_group
objekt může být spuštěno v kontextu volání.
Pokud jeden nebo více úkolů naplánovaných pro tento task_group
objekt vyvolá výjimku, modul runtime vybere jednu takovou výjimku z výběru a rozšíří ji mimo volání metody run_and_wait
.
Po návratu run_and_wait
z metody na task_group
objektu modul runtime resetuje objekt do čistého stavu, kde jej lze znovu použít. To zahrnuje případ zrušení objektu task_group
.
V nevýznamné cestě provádění máte mandát volat buď tuto metodu, nebo metodu wait
před destruktorem task_group
spuštění.
task_group
Vytvoří nový task_group
objekt.
task_group();
task_group(
cancellation_token _CancellationToken
);
Parametry
_CancellationToken
Token zrušení, který se má přidružit k této skupině úloh. Po zrušení tokenu se skupina úloh zruší.
Poznámky
Konstruktor, který přebírá token zrušení, vytvoří task_group
, který bude zrušen při zrušení zdroje přidruženého k tokenu. Poskytnutí explicitního tokenu zrušení také izoluje tuto skupinu úloh od implicitního zrušení z nadřazené skupiny s jiným tokenem nebo bez tokenu.
~task_group
task_group
Zničí objekt. Očekává se, wait
že zavoláte objekt nebo run_and_wait
metodu před spuštěním destruktoru, pokud se destruktor nespouštějí v důsledku odvíjení zásobníku kvůli výjimce.
~task_group();
Poznámky
Pokud se destruktor spustí jako výsledek normálního spuštění (například bez odvíjení zásobníku kvůli výjimce) a wait
run_and_wait
ani metody nebyly volány, destruktor může vyvolat výjimku missing_wait .
wait
Počká, dokud se nedokončí nebo zruší všechna práce na objektu task_group
.
task_group_status wait();
Návratová hodnota
Označení, jestli bylo čekání splněné nebo jestli byla skupina úloh zrušena, a to buď kvůli explicitní operaci zrušení, nebo výjimce z některého z jejích úkolů. Další informace najdete v tématu task_group_status.
Poznámky
Všimněte si, že jeden nebo více úkolů naplánovaných na tento task_group
objekt může být spuštěno v kontextu volání.
Pokud jeden nebo více úkolů naplánovaných pro tento task_group
objekt vyvolá výjimku, modul runtime vybere jednu takovou výjimku z výběru a rozšíří ji mimo volání metody wait
.
Volání wait
objektu ho task_group
resetuje do čistého stavu, ve kterém se dá znovu použít. To zahrnuje případ zrušení objektu task_group
.
V nevýznamné cestě provádění máte mandát volat buď tuto metodu, nebo metodu run_and_wait
před destruktorem task_group
spuštění.
Viz také
concurrency – obor názvů
structured_task_group – třída
task_handle – třída