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

Název Popis
task_group Přetíženo. Vytvoří nový task_group objekt.
~task_group Destruktor task_group Zničí objekt. Očekává se, že zavoláte buď metodu wait, nebo run_and_wait na objektu před spuštěním destruktoru, pokud se destruktor nespouští v důsledku odvíjení zásobníku kvůli výjimce.

Veřejné metody

Název Popis
zrušit Vynakládá maximální úsilí ke zrušení dílčího stromu práce, který vychází z této skupiny úloh. Pokud je to možné, zruší se každý úkol naplánovaný ve skupině úloh.
ruší_se Informuje volajícího, zda je úkolová skupina právě uprostřed ruš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 nastat situace, kdy je objekt task_group spouštěn inline a skupina úloh dále v stromu úloh byla zrušena. V případech, kdy může modul runtime předem určit, že zrušení proběhne skrze tento task_group objekt, se vrátí také true.
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řijímá odkaz na objekt funkce jako parametr, zahrnuje alokaci na haldě uvnitř běhového prostředí, což může způsobit horší výkon než verze, která přijímá odkaz na task_handle objekt. Verze, která přebírá parametr _Placement, způsobí, že úloha bude upřednostňována pro spuštění na místě určeném tímto parametrem.
run_and_wait Přetíženo. Naplánuje úlohu tak, aby byla spuštěna přímo v aktuálním kontextu volání s pomocí objektu task_group pro plnou podporu zrušení. Funkce pak počká, dokud není veškerá práce na objektu task_group dokončena nebo zrušena. 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 není veškerá práce na objektu task_group dokončena nebo zrušena.

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 Paralelismu úkolů.

Hierarchie dědičnosti

task_group

Požadavky

Hlavička: ppl.h

Obor názvů: souběžnost

zrušit

Vynakládá maximální úsilí ke zrušení dílčího stromu práce, který vychází z této skupiny ú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í.

ruší se

Informuje volajícího, zda je úkolová skupina právě uprostřed ruš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 nastat situace, kdy je objekt task_group spouštěn inline a skupina úloh dále v stromu úloh byla zrušena. V případech, kdy může modul runtime předem určit, že zrušení proběhne skrze tento task_group objekt, se vrátí také true.

bool is_canceling();

Návratová hodnota

Označení, zda je objekt task_group uprostřed probíhajícího zrušení (nebo je zaručeno, že brzy bude).

Poznámky

Další informace najdete v tématu Zrušení.

provozovat

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řijímá odkaz na objekt funkce jako parametr, zahrnuje alokaci na haldě uvnitř běhového prostředí, což může způsobit horší výkon než verze, která přijímá odkaz na task_handle objekt. Verze, která přebírá parametr _Placement, způsobí, že úloha bude upřednostňována pro spuštění na místě 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í těla ú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
Identifikátor práce, která je plánována Všimněte si, že volající zodpovídá za životnost tohoto objektu. Prostředí runtime bude nadále očekávat, že objekt task_group bude existovat, dokud není zavolána metoda wait nebo run_and_wait na tomto objektu.

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 pomocí ukazatele nebo odkazu na pracovní funkci, zůstane platná, dokud se pracovní funkce neukončí.

Pokud dojde k destrukci jako výsledek odvíjení zásobníku z výjimky, nemusíte zaručit, že bylo provedeno volání buď na metodu wait, nebo na metodu run_and_wait. 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 byl popisovač úkolu zadaný pomocí parametru _Task_handle již naplánován na objekt skupiny úloh prostřednictvím metody run a mezitím nedošlo k žádnému volání metod wait nebo run_and_wait v této skupině úloh.

run_and_wait

Naplánuje úlohu tak, aby byla spuštěna přímo v aktuálním kontextu volání s pomocí objektu task_group pro plnou podporu zrušení. Funkce pak počká, dokud není veškerá práce na objektu task_group dokončena nebo zrušena. 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
Identifikátor úlohy, která se spustí přímo v aktuálním kontextu volání. Všimněte si, že volající zodpovídá za životnost tohoto objektu. Modul runtime bude i nadále očekávat, že zůstane aktivní, dokud metoda run_and_wait nedokončí provádění.

_Func
Funkce, která bude volána k provádění hlavní části úkolu. 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ěno nebo jestli byla skupina úloh zrušena, a to buď kvůli operaci explicitního zrušení, nebo kvůli výjimce vyvolané některým 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 přímo v rámci volajícího kontextu.

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 z metody run_and_wait na objektu task_group modul runtime resetuje objekt do čistého stavu, aby mohl být znovu použit. To zahrnuje případ zrušení objektu task_group .

V ne-výjimečné cestě provádění je třeba zavolat buď tuto metodu, nebo metodu wait před provedením destruktora task_group.

skupina úloh

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ím explicitního tokenu zrušení je tato skupina úloh také izolována od účasti na implicitním zrušení pocházejícím z nadřazené skupiny s jiným tokenem nebo bez tokenu.

~task_group

task_group Zničí objekt. Očekává se, že zavoláte buď metodu wait, nebo run_and_wait na objektu před spuštěním destruktoru, pokud se destruktor nespouští v důsledku odvíjení zásobníku kvůli výjimce.

~task_group();

Poznámky

Pokud se destruktor spustí jako výsledek běhu programu (například bez odvíjení zásobníku kvůli výjimce) a metody wait ani run_and_wait nebyly volány, destruktor může vyhodit missing_wait výjimku.

počkejte

Počká, dokud není veškerá práce na objektu task_group dokončena nebo zrušena.

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 ve volajícím kontextu běžet inline.

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 na objektu task_group ho resetuje do čistého stavu, ve kterém může být znovu použit. To zahrnuje případ zrušení objektu task_group .

V ne-výjimečné cestě provádění máte povinnost volat buď tuto metodu, nebo metodu run_and_wait před spuštěním destruktoru task_group.

Viz také

concurrency – obor názvů
třída structured_task_group
Třída task_handle