Sdílet prostřednictvím


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

Jméno 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

Jméno 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

Obor názvů: 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();

Vrácená 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 waitrun_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()().

Vrácená 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 waitrun_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();

Vrácená 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