Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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_groupobjekt nemůže používat více vláken. Všechny operace s objektemstructured_task_groupmusí provádět vlákno, které objekt vytvořilo. Dvě výjimky tohoto pravidla jsou členské funkcecancelais_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_groupobjekt jsou naplánovány pomocítask_handleobjektů, 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_groupobjekty, druhý objekt deklarován (vnitřní jeden) musí destrukci před jakoukoli metodou kroměcancelnebois_cancelingje volána na první (vnější). Tato podmínka platí v obou případech, kdy jednoduše deklarujete vícestructured_task_groupobjektů ve stejných nebo funkčně vnořených oborech a také v případě úlohy, která byla zařazena dostructured_task_groupfronty prostřednictvímrunneborun_and_waitmetod.Na rozdíl od obecné
task_grouptřídy jsou všechny stavy vestructured_task_grouptří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
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 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