Share via


structured_task_group-klasse

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_group object kan niet worden gebruikt door meerdere threads. Alle bewerkingen op een structured_task_group object moeten worden uitgevoerd door de thread die het object heeft gemaakt. De twee uitzonderingen op deze regel zijn de lidfuncties cancel en is_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_group object, worden gepland met behulp van task_handle objecten waarvan u de levensduur expliciet moet beheren.

  • Meerdere groepen mogen alleen in strikt geneste volgorde worden gebruikt. Als twee structured_task_group objecten worden gedeclareerd, moet de tweede (de binnenste) worden vernietigd voordat er een methode wordt aangeroepen, behalve cancel of is_canceling, op de eerste (de buitenste). Deze voorwaarde geldt in het geval van het simpelweg declareren van meerdere structured_task_group objecten binnen dezelfde of functioneel geneste bereiken, evenals het geval van een taak die in de wachtrij is geplaatst via de structured_task_grouprun of run_and_wait methoden.

  • In tegenstelling tot de algemene task_group klasse zijn alle statussen in de structured_task_group klasse 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.

Zie ook

concurrentie Namespace
task_group-klasse
task_handle-klasse