structured_task_group – třída
Třída structured_task_group
představuje vysoce strukturovanou kolekci paralelní práce. Jednotlivé paralelní úkoly můžete zařazovat do fronty na structured_task_group
objekty pomocí task_handle
objektů a čekat na jejich dokončení nebo zrušit skupinu úloh před dokončením provádění, což přeruší všechny úkoly, které nezačaly provádění.
Syntaxe
class structured_task_group;
Členové
Veřejné konstruktory
Název | Popis |
---|---|
structured_task_group | Přetíženo. Vytvoří nový structured_task_group objekt. |
~structured_task_group Destruktor | structured_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 structured_task_group objekt (ačkoli to jistě kvalifikuje tuto metodu k vrácení true ). Může se jednat o případ, že structured_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 structured_task_group objektem, true se vrátí také. |
Spusťte | Přetíženo. Naplánuje úkol na objektu structured_task_group . Volající spravuje životnost objektu task_handle předaného v parametru _Task_handle . 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 structured_task_group pro plnou podporu zrušení. task_handle Pokud je objekt předán jako parametr run_and_wait , volající je zodpovědný za správu životnosti objektutask_handle . Funkce pak počká, dokud se nedokončí nebo zruší všechna práce na objektu structured_task_group . |
Počkej | Čeká, až se všechna práce na structured_task_group dokončení nebo zrušení zruší. |
Poznámky
Pro získání výkonu existuje řada závažných omezení použití objektu structured_task_group
:
Jeden
structured_task_group
objekt nemůže používat více vláken. Všechny operace s objektemstructured_task_group
musí provádět vlákno, které objekt vytvořilo. Dvě výjimky tohoto pravidla jsou členské funkcecancel
ais_canceling
. Objekt nemusí být v seznamu zachycení výrazu lambda a použit v rámci úkolu, pokud úkol nepoužívá některou z operací zrušení.Všechny úkoly naplánované na
structured_task_group
objekt jsou naplánovány pomocítask_handle
objektů, které je nutné explicitně spravovat životnost.Více skupin lze použít pouze v naprosto vnořeném pořadí. Pokud jsou deklarovány dva
structured_task_group
objekty, druhý objekt deklarován (vnitřní jeden) musí destrukci před jakoukoli metodou kroměcancel
nebois_canceling
je volána na první (vnější). Tato podmínka platí v obou případech, kdy jednoduše deklarujete vícestructured_task_group
objektů ve stejných nebo funkčně vnořených oborech a také v případě úlohy, která byla zařazena dostructured_task_group
fronty prostřednictvímrun
neborun_and_wait
metod.Na rozdíl od obecné
task_group
třídy jsou všechny stavy vestructured_task_group
třídě konečné. Jakmile do skupiny zařadíte úkoly do fronty a počkáte na jejich dokončení, nemusíte stejnou skupinu znovu používat.
Další informace naleznete v tématu Paralelismus úkolu.
Hierarchie dědičnosti
structured_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 structured_task_group
objekt (ačkoli to jistě kvalifikuje tuto metodu k vrácení true
). Může se jednat o případ, že structured_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 structured_task_group
objektem, true
se vrátí také.
bool is_canceling();
Návratová hodnota
Označení, zda structured_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 structured_task_group
. Volající spravuje životnost objektu task_handle
předaného v parametru _Task_handle
. 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<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _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.
_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 structured_task_group
objekt nebo metoda nevolá.
_Umístění
Odkaz na umístění, kde by se měl provést úkol reprezentovaný parametrem _Task_handle
.
Poznámky
Modul runtime vytvoří kopii pracovní funkce, kterou předáte této metodě. Všechny změny stavu, ke kterým dochází v objektu funkce, který předáte této metodě, se nezobrazí ve vaší kopii tohoto objektu funkce.
structured_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
.
Vyvolá výjimku invalid_multiple_scheduling v případě, že popisovač úkolu zadaný parametrem _Task_handle
již byl naplánován na objekt skupiny úloh prostřednictvím run
metody a nedošlo k wait
žádnému volání 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 structured_task_group
pro plnou podporu zrušení. task_handle
Pokud je objekt předán jako parametr run_and_wait
, volající je zodpovědný za správu životnosti objektutask_handle
. Funkce pak počká, dokud se nedokončí nebo zruší všechna práce na objektu structured_task_group
.
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í ú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 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 structured_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 structured_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 vrácení structured_task_group
této funkce se objekt považuje za konečný a neměl by být použit. Všimněte si, že využití po run_and_wait
vrácení metody způsobí nedefinované chování.
V nevýznamné cestě provádění máte mandát volat buď tuto metodu, nebo metodu wait
před destruktorem structured_task_group
spuštění.
structured_task_group
Vytvoří nový structured_task_group
objekt.
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
Parametry
_CancellationToken
Token zrušení, který se má přidružit k této strukturované skupině úloh. Při zrušení tokenu se zruší strukturovaná skupina úloh.
Poznámky
Konstruktor, který přebírá token zrušení, vytvoří structured_task_group
, který bude zrušen při zrušení zdroje přidruženého k tokenu. Poskytnutí explicitního zrušení tokenu také izoluje tuto strukturovanou skupinu úloh od účasti implicitního zrušení z nadřazené skupiny s jiným tokenem nebo bez tokenu.
~structured_task_group
structured_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.
~structured_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
Čeká, až se všechna práce na structured_task_group
dokončení nebo zrušení zruší.
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 structured_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 structured_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
.
Po vrácení structured_task_group
této funkce se objekt považuje za konečný a neměl by být použit. Všimněte si, že využití po wait
vrácení metody způsobí nedefinované chování.
V nevýznamné cestě provádění máte mandát volat buď tuto metodu, nebo metodu run_and_wait
před destruktorem structured_task_group
spuštění.
Viz také
concurrency – obor názvů
task_group – třída
task_handle – třída