Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
De structured_task_group klasse vertegenwoordigt een zeer gestructureerde verzameling parallelle werkzaamheden. U kunt afzonderlijke parallelle taken in de wachtrij plaatsen voor een structured_task_group object met behulp van task_handle objecten en wachten totdat ze zijn voltooid of de taakgroep annuleren voordat ze klaar zijn met het uitvoeren, waardoor alle taken die nog niet zijn begonnen met de uitvoering worden afgebroken.
Syntaxis
class structured_task_group;
Leden
Openbare constructors
| Naam | Description |
|---|---|
| gestructureerde_taakgroep | Overbelast. Maakt een nieuw structured_task_group object. |
| ~structured_task_group destructor | Vernietigt een structured_task_group object. U wordt verwacht dat u de wait of run_and_wait methode voor het object aanroept voordat de destructor wordt uitgevoerd, tenzij de destructor wordt uitgevoerd als gevolg van een stack die wordt afgebroken vanwege een uitzondering. |
Openbare methoden
| Naam | Description |
|---|---|
| annuleren | Pogingen worden gedaan om de sub-boom van werk te annuleren die zijn oorsprong vindt in deze taakgroep. Elke taak die in de taakgroep is gepland, wordt, indien mogelijk, tijdelijk geannuleerd. |
| is_annuleren | Informeert de aanroeper of de taakgroep momenteel bezig is met annuleren. Dit geeft niet noodzakelijkerwijs aan dat de cancel methode op het structured_task_group object is aangeroepen (hoewel deze methode zeker in aanmerking komt om te retourneren true). Het kan zijn dat het structured_task_group object inline wordt uitgevoerd en dat een taakgroep verder in de werkstructuur is geannuleerd. In gevallen zoals deze waarbij de runtime van tevoren kan bepalen dat de annulering door dit structured_task_group object zal stromen, true wordt ook geretourneerd. |
| uitvoeren | Overbelast. Hiermee plant u een taak op het structured_task_group object. De aanroeper beheert de levensduur van het task_handle object dat is doorgegeven in de _Task_handle parameter. De versie die de parameter _Placement gebruikt, zorgt ervoor dat de taak wordt bevooroordeeld bij het uitvoeren op de locatie die door die parameter is opgegeven. |
| run_and_wait | Overbelast. Hiermee wordt een taak gepland die inline moet worden uitgevoerd in de aanroepende context met behulp van het structured_task_group object voor volledige annuleringsondersteuning. Als een task_handle object als parameter run_and_waitwordt doorgegeven, is de aanroeper verantwoordelijk voor het beheren van de levensduur van het task_handle object. De functie wacht vervolgens totdat alle werkzaamheden aan het structured_task_group object zijn voltooid of geannuleerd. |
| wachten | Wacht totdat al het werk aan de structured_task_group is voltooid of geannuleerd. |
Opmerkingen
Er gelden een aantal ernstige beperkingen voor het gebruik van een structured_task_group object om prestaties te verkrijgen:
Een enkel
structured_task_groupobject kan niet worden gebruikt door meerdere threads. Alle bewerkingen op eenstructured_task_groupobject moeten worden uitgevoerd door de thread die het object heeft gemaakt. De twee uitzonderingen op deze regel zijn de lidfunctiescancelenis_canceling. Het object bevindt zich mogelijk niet in de opnamelijst van een lambda-expressie en wordt gebruikt binnen een taak, tenzij de taak een van de annuleringsbewerkingen gebruikt.Alle taken die zijn gepland voor een
structured_task_groupobject, worden gepland met behulp vantask_handleobjecten waarvan u de levensduur expliciet moet beheren.Meerdere groepen mogen alleen in strikt geneste volgorde worden gebruikt. Als twee
structured_task_groupobjecten worden gedeclareerd, moet de tweede (de binnenste) worden vernietigd voordat er een methode wordt aangeroepen, behalvecancelofis_canceling, op de eerste (de buitenste). Deze voorwaarde geldt in het geval van het simpelweg declareren van meerderestructured_task_groupobjecten binnen dezelfde of functioneel geneste bereiken, evenals het geval van een taak die in de wachtrij is geplaatst via destructured_task_grouprunofrun_and_waitmethoden.In tegenstelling tot de algemene
task_groupklasse zijn alle statussen in destructured_task_groupklasse definitief. Nadat u taken in de wachtrij hebt geplaatst in de groep en hebt gewacht totdat ze zijn voltooid, gebruikt u mogelijk niet opnieuw dezelfde groep.
Zie taakparallellismevoor meer informatie.
Overnamehiƫrarchie
structured_task_group
Requirements
Koptekst: ppl.h
Naamruimte: concurrentie
cancel
Probeert zo goed mogelijk de subboom van het werk te annuleren die wortelt in deze taakgroep. Elke taak die in de taakgroep is gepland, wordt, indien mogelijk, tijdelijk geannuleerd.
void cancel();
Opmerkingen
Zie Annuleringvoor meer informatie.
is_annuleren
Informeert de aanroeper of de taakgroep zich momenteel in een annuleringsproces bevindt. Dit geeft niet noodzakelijkerwijs aan dat de cancel methode op het structured_task_group object is aangeroepen (hoewel deze methode zeker in aanmerking komt om te retourneren true). Het kan zijn dat het structured_task_group object inline wordt uitgevoerd en dat een taakgroep verder in de werkstructuur is geannuleerd. In gevallen zoals deze waarbij de runtime van tevoren kan bepalen dat de annulering door dit structured_task_group object zal stromen, true wordt ook geretourneerd.
bool is_canceling();
Retourwaarde
Een indicatie of het structured_task_group object zich in het proces van annuleren bevindt (of binnenkort gegarandeerd zal zijn).
Opmerkingen
Zie Annuleringvoor meer informatie.
run
Hiermee plant u een taak op het structured_task_group object. De aanroeper beheert de levensduur van het task_handle object dat is doorgegeven in de _Task_handle parameter. De versie die de parameter _Placement gebruikt, zorgt ervoor dat de taak wordt bevooroordeeld bij het uitvoeren op de locatie die door die parameter is opgegeven.
template<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _Function>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement);
Parameterwaarden
_Functie
Het type van het functieobject dat wordt aangeroepen om de hoofdtekst van de taakgreep uit te voeren.
_Task_handle
Een verwijzing naar het werk dat wordt gepland. Houd er rekening mee dat de beller verantwoordelijk is voor de levensduur van dit object. De runtime verwacht dat deze actief blijft totdat de wait of run_and_wait methode op dit structured_task_group object is aangeroepen.
_Plaatsing
Een verwijzing naar de locatie waar de taak die wordt vertegenwoordigd door de _Task_handle parameter moet worden uitgevoerd.
Opmerkingen
De runtime maakt een kopie van de werkfunctie die u aan deze methode doorgeeft. Eventuele statuswijzigingen die optreden in een functieobject dat u aan deze methode doorgeeft, worden niet weergegeven in uw kopie van dat functieobject.
Als de structured_task_group wordt vernietigd door stack-ontwinding als gevolg van een uitzondering, hoeft u geen garantie te geven dat er een aanroep is gedaan naar de wait- of run_and_wait-methode. In dit geval zal de destructor op de juiste wijze de taak annuleren en wachten tot de taak die wordt vertegenwoordigd door de _Task_handle parameter is voltooid.
Genereert een invalid_multiple_scheduling uitzondering als de taakgreep die door de _Task_handle parameter is opgegeven, al is gepland op een taakgroepobject via de run methode en er geen tussenliggende aanroep naar de wait of run_and_wait methode voor die taakgroep is geweest.
uitvoeren_en_wachten
Hiermee wordt een taak gepland die inline moet worden uitgevoerd in de aanroepende context met behulp van het structured_task_group object voor volledige annuleringsondersteuning. Als een task_handle object als parameter run_and_waitwordt doorgegeven, is de aanroeper verantwoordelijk voor het beheren van de levensduur van het task_handle object. De functie wacht vervolgens totdat alle werkzaamheden aan het structured_task_group object zijn voltooid of geannuleerd.
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);
Parameterwaarden
_Functie
Het type van het functieobject dat wordt aangeroepen om de taak uit te voeren.
_Task_handle
Een verwijzing naar de taak die inline wordt uitgevoerd binnen de oproepende context. Houd er rekening mee dat de beller verantwoordelijk is voor de levensduur van dit object. De runtime blijft verwachten dat deze actief is totdat de uitvoering van de run_and_wait methode is voltooid.
_Func
Een functie die wordt aangeroepen om de hoofdtekst van het werk aan te roepen. Dit kan een lambda of ander object zijn dat een versie van de operator voor functieoproep ondersteunt met de handtekening void operator()().
Retourwaarde
Een indicatie of de wachttijd is voldaan of dat de taakgroep is geannuleerd, vanwege een expliciete annuleringsbewerking of een uitzondering die wordt gegenereerd vanuit een van de taken. Zie task_group_status voor meer informatie
Opmerkingen
Houd er rekening mee dat een of meer taken die voor dit structured_task_group object zijn gepland, inline kunnen worden uitgevoerd in de aanroepende context.
Als een of meer van de taken die zijn gepland voor dit structured_task_group object een uitzondering gooit, selecteert de runtime naar keuze een van deze uitzonderingen en geeft deze door vanuit de aanroep naar de run_and_wait methode.
Nadat deze functie is geretourneerd, wordt het structured_task_group object in een uiteindelijke status beschouwd en mag het niet worden gebruikt. Houd er rekening mee dat het gebruik na het retourneren van de run_and_wait methode resulteert in niet-gedefinieerd gedrag.
In het niet-uitzonderlijke pad van uitvoering heeft u de verplichting om deze methode of de wait methode aan te roepen voordat de destructor van de structured_task_group wordt uitgevoerd.
gestructureerde_taakgroep
Maakt een nieuw structured_task_group object.
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
Parameterwaarden
_CancellationToken
Een annuleringstoken dat aan deze gestructureerde taakgroep moet worden gekoppeld. De gestructureerde taakgroep wordt geannuleerd wanneer het token wordt geannuleerd.
Opmerkingen
De constructor die een annuleringstoken gebruikt, maakt een structured_task_group token dat wordt geannuleerd wanneer de bron die is gekoppeld aan het token wordt geannuleerd. Het verstrekken van een expliciet annuleringstoken isoleert de gestructureerde taakgroep ook van betrokkenheid bij een impliciete annulering van een bovenliggende groep met een ander token of geen token.
~gestructureerde_taakgroep
Vernietigt een structured_task_group object. U wordt verwacht dat u de wait of run_and_wait methode voor het object aanroept voordat de destructor wordt uitgevoerd, tenzij de destructor wordt uitgevoerd als gevolg van een stack die wordt afgebroken vanwege een uitzondering.
~structured_task_group();
Opmerkingen
Als de destructor wordt uitgevoerd als gevolg van normale uitvoering (bijvoorbeeld niet stapelen als gevolg van een uitzondering) en noch de wait noch run_and_wait methoden zijn aangeroepen, kan de destructor een missing_wait uitzondering genereren.
wait
Wacht totdat al het werk aan de structured_task_group is voltooid of geannuleerd.
task_group_status wait();
Retourwaarde
Een indicatie of de wachttijd is voldaan of dat de taakgroep is geannuleerd, vanwege een expliciete annuleringsbewerking of een uitzondering die wordt gegenereerd vanuit een van de taken. Zie task_group_status voor meer informatie
Opmerkingen
Houd er rekening mee dat een of meer taken die voor dit structured_task_group object zijn gepland, inline kunnen worden uitgevoerd in de aanroepende context.
Als een of meer van de taken die zijn gepland voor dit structured_task_group object een uitzondering gooit, selecteert de runtime naar keuze een van deze uitzonderingen en geeft deze door vanuit de aanroep naar de wait methode.
Nadat deze functie is geretourneerd, wordt het structured_task_group object in een uiteindelijke status beschouwd en mag het niet worden gebruikt. Houd er rekening mee dat het gebruik na het retourneren van de wait methode resulteert in niet-gedefinieerd gedrag.
In het niet-uitzonderlijke pad van uitvoering heeft u de verplichting om deze methode of de run_and_wait methode aan te roepen voordat de destructor van de structured_task_group wordt uitgevoerd.