Share via


Scheduler-klasse

Vertegenwoordigt een abstractie voor een Runtime-scheduler voor gelijktijdigheid.

Syntaxis

class Scheduler;

Leden

Beveiligde constructors

Naam Description
Planner Een object van de Scheduler klasse kan alleen worden gemaakt met behulp van factory-methoden of impliciet.
~Scheduler Destructor Een object van de klasse wordt impliciet vernietigd wanneer alle externe verwijzingen naar de Scheduler klasse niet meer bestaan.

Openbare methoden

Naam Description
Bijvoegen Koppelt de scheduler aan de aanroepende context. Nadat deze methode is geretourneerd, wordt de aanroepende context beheerd door de scheduler, en wordt de scheduler de huidige scheduler.
Creëren Er wordt een nieuwe scheduler gemaakt waarvan het gedrag wordt beschreven door de _Policy-parameter, er wordt een initiële verwijzing naar de scheduler geplaatst en er wordt een pointer ernaar geretourneerd.
CreateScheduleGroup Overbelast. Hiermee maakt u een nieuwe planningsgroep binnen de planner. De versie die de parameter _Placement gebruikt, zorgt ervoor dat taken binnen de nieuw aangemaakte planningsgroep de neiging hebben om te worden uitgevoerd op de locatie gespecificeerd door die parameter.
GetNumberOfVirtualProcessors Retourneert het huidige aantal virtuele processors voor de scheduler.
GetPolicy Retourneert een kopie van het beleid waarmee de scheduler is gemaakt.
Id Retourneert een unieke identifier voor de scheduler.
IsAvailableLocation Bepaalt of een bepaalde locatie beschikbaar is op de planner.
Verwijzing Hiermee wordt het aantal scheduler-referentiegegevens verhoogd.
RegisterShutdownEvent Zorgt ervoor dat de Windows-gebeurtenisgreep die is doorgegeven in de _Event parameter gesignaleerd wordt wanneer de scheduler afsluit en zichzelf vernietigt. Op het moment dat de gebeurtenis wordt gesignaleerd, is al het werk dat naar de planner is gepland, voltooid. Er kunnen meerdere afsluit gebeurtenissen worden geregistreerd via deze methode.
Uitbrengen Hiermee wordt de scheduler-referentietelling verminderd.
ResetDefaultSchedulerPolicy Hiermee stelt u het standaardbeleid voor scheduler opnieuw in op de standaardinstelling voor runtime. De volgende keer dat een standaardplanner wordt gemaakt, worden de standaardbeleidsinstellingen van runtime gebruikt.
ScheduleTask Overbelast. Hiermee wordt een lichtgewicht taak binnen de planner gepland. De lichtgewicht taak wordt geplaatst in een planningsgroep die wordt bepaald door de runtime. De versie die de parameter _Placement gebruikt, zorgt ervoor dat de taak wordt bevooroordeeld bij het uitvoeren op de opgegeven locatie.
SetDefaultSchedulerPolicy Hiermee kan een door de gebruiker gedefinieerd beleid worden gebruikt om de standaardplanner te maken. Deze methode kan alleen worden aangeroepen wanneer er geen standaardplanner bestaat binnen het proces. Nadat een standaardbeleid is ingesteld, blijft dit van kracht totdat de volgende geldige oproep naar de methode SetDefaultSchedulerPolicyResetDefaultSchedulerPolicy wordt uitgevoerd.

Opmerkingen

De Runtime-scheduler voor gelijktijdigheid maakt gebruik van uitvoeringscontexten, die worden toegewezen aan de uitvoeringscontexten van het besturingssysteem, zoals een thread, om het werk uit te voeren dat door uw toepassing in de wachtrij wordt geplaatst. Op elk gewenst moment is het gelijktijdigheidsniveau van een scheduler gelijk aan het aantal virtuele processoren dat eraan is verleend door Resource Manager. Een virtuele processor is een abstractie voor een verwerkingsresource en wordt toegewezen aan een hardwarethread op het onderliggende systeem. Slechts één scheduler-context kan op een bepaald moment worden uitgevoerd op een virtuele processor.

De Gelijktijdigheidsruntime maakt een standaardplanner per proces om parallel werk uit te voeren. Daarnaast kunt u uw eigen scheduler-exemplaren maken en bewerken met behulp van deze klasse.

Overnamehiërarchie

Scheduler

Requirements

Koptekst: concrt.h

Naamruimte: concurrentie

Bijvoegen

Koppelt de scheduler aan de aanroepende context. Nadat deze methode is geretourneerd, wordt de aanroepende context beheerd door de scheduler en wordt de scheduler de huidige scheduler.

virtual void Attach() = 0;

Opmerkingen

Als u een scheduler koppelt, wordt impliciet een verwijzing bij de scheduler geplaatst.

Op een bepaald moment in de toekomst moet u de methode CurrentScheduler::Detach aanroepen om de scheduler te laten afsluiten.

Als deze methode wordt aangeroepen vanuit een context die al is gekoppeld aan een andere planner, wordt de bestaande planner onthouden als de vorige planner en wordt de zojuist gemaakte planner de huidige planner. Wanneer u de CurrentScheduler::Detach methode op een later moment aanroept, wordt de vorige planner hersteld als de huidige planner.

Met deze methode wordt een improper_scheduler_attach uitzondering gegenereerd als deze scheduler de huidige scheduler van de aanroepende context is.

Create

Hiermee maakt u een nieuwe taakscheduler waarvan het gedrag wordt beschreven door de _Policy-parameter, plaatst u een initiële referentie naar de scheduler en retourneert u een pointer ernaar.

static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);

Parameterwaarden

_Beleid
Het scheduler-beleid dat het gedrag van de zojuist gemaakte scheduler beschrijft.

Retourwaarde

Een aanwijzer naar een zojuist gemaakte planner. Dit Scheduler object heeft een initiële referentieaantal.

Opmerkingen

Nadat een scheduler met de Create methode is gemaakt, moet u de Release methode op een bepaald moment in de toekomst aanroepen om het eerste aantal verwijzingen te verwijderen en de scheduler af te sluiten.

Een scheduler die met deze methode is gemaakt, is niet gekoppeld aan de aanroepende context. Deze kan worden gekoppeld aan een context met behulp van de methode Attach .

Deze methode kan verschillende uitzonderingen genereren, waaronder scheduler_resource_allocation_error en invalid_scheduler_policy_value.

MaakPlanningGroep

Hiermee maakt u een nieuwe planningsgroep binnen de planner. De versie die de parameter _Placement gebruikt, zorgt ervoor dat taken binnen de nieuw aangemaakte planningsgroep de neiging hebben om te worden uitgevoerd op de locatie gespecificeerd door die parameter.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;

Parameterwaarden

_Plaatsing
Een verwijzing naar een locatie waar de taken binnen de planningsgroep de voorkeur krijgen om daar uitgevoerd te worden.

Retourwaarde

Een aanwijzer naar de zojuist gemaakte planningsgroep. Dit ScheduleGroup object heeft een eerste verwijzingsaantal.

Opmerkingen

U moet de Release-methode in een planningsgroep aanroepen wanneer u klaar bent met het plannen van taken. De scheduler vernietigt de planningsgroep wanneer al het werk dat eraan is toegewezen, is voltooid.

Als u deze planner expliciet hebt aangemaakt, moet u alle verwijzingen naar de groepen binnen deze vrijgeven voordat u uw verwijzingen naar de planner vrijgeeft.

AantalVirtueleProcessorenOphalen

Retourneert het huidige aantal virtuele processors voor de scheduler.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Retourwaarde

Het huidige aantal virtuele processors voor de planner.

GetPolicy

Retourneert een kopie van het beleid waarmee de scheduler is gemaakt.

virtual SchedulerPolicy GetPolicy() const = 0;

Retourwaarde

Een kopie van het beleid waarmee de planner is gemaakt.

Identiteitsbewijs

Retourneert een unieke identifier voor de scheduler.

virtual unsigned int Id() const = 0;

Retourwaarde

Een unieke id voor de scheduler.

IsBeschikbareLocatie

Bepaalt of een bepaalde locatie beschikbaar is op de planner.

virtual bool IsAvailableLocation(const location& _Placement) const = 0;

Parameterwaarden

_Plaatsing
Een verwijzing naar de locatie waarover de planner moet worden bevraagd.

Retourwaarde

Een indicatie of de locatie die door het _Placement argument is opgegeven, al dan niet beschikbaar is op de planner.

Opmerkingen

Houd er rekening mee dat de retourwaarde een onmiddellijke steekproef is van of de opgegeven locatie beschikbaar is. In aanwezigheid van meerdere planners kan dynamisch resourcebeheer op elk gewenst moment resources van planners toevoegen of verwijderen. Als dit gebeurt, kan de opgegeven locatie de beschikbaarheid wijzigen.

Reference

Hiermee wordt het aantal scheduler-referentiegegevens verhoogd.

virtual unsigned int Reference() = 0 ;

Retourwaarde

Het zojuist opgetelde referentieaantal.

Opmerkingen

Dit wordt meestal gebruikt om de levensduur van de planningsmodule voor samenstelling te beheren. Wanneer het aantal verwijzingen van een scheduler op nul komt, zal de scheduler worden afgesloten en vernietigd nadat alle werkzaamheden op de scheduler zijn voltooid.

De methode genereert een improper_scheduler_reference uitzondering als het verwijzingsaantal voordat de Reference methode werd aangeroepen nul was en de aanroep wordt uitgevoerd vanuit een context die niet eigendom is van de scheduler.

RegisterShutdownEvent

Zorgt ervoor dat de Windows-gebeurtenisgreep die is doorgegeven in de _Event parameter gesignaleerd wordt wanneer de scheduler afsluit en zichzelf vernietigt. Op het moment dat de gebeurtenis wordt gesignaleerd, is al het werk dat naar de planner is gepland, voltooid. Er kunnen meerdere afsluit gebeurtenissen worden geregistreerd via deze methode.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Parameterwaarden

_Gebeurtenis
Een ingang naar een Windows-gebeurtenisobject dat wordt gesignaleerd door de runtime wanneer de scheduler wordt afgesloten en zichzelf vernietigt.

Vrijgeven

Hiermee wordt de scheduler-referentietelling verminderd.

virtual unsigned int Release() = 0;

Retourwaarde

Het nieuw afgebroken referentieaantal.

Opmerkingen

Dit wordt meestal gebruikt om de levensduur van de scheduler voor samenstelling te beheren. Wanneer het aantal verwijzingen van een taakplanner op nul valt, wordt de taakplanner afgesloten en vernietigd nadat alle taken op de taakplanner zijn voltooid.

ResetDefaultSchedulerPolicy

Hiermee stelt u het standaardbeleid voor scheduler opnieuw in op de standaardinstelling voor runtime. De volgende keer dat een standaardplanner wordt gemaakt, worden de standaardbeleidsinstellingen van runtime gebruikt.

static void __cdecl ResetDefaultSchedulerPolicy();

Opmerkingen

Deze methode kan worden aangeroepen terwijl er een standaardplanner bestaat binnen het proces. Dit heeft geen invloed op het beleid van de bestaande standaardplanner. Als de standaardplanner echter zou worden afgesloten en op een later tijdstip een nieuwe standaardwaarde zou worden gemaakt, zou de nieuwe planner de standaardbeleidsinstellingen voor runtime gebruiken.

Taakplanner

Een object van de Scheduler klasse kan alleen worden gemaakt met behulp van factory-methoden of impliciet.

Scheduler();

Opmerkingen

De standaardplanner van het proces wordt impliciet gemaakt wanneer u veel van de runtimefuncties gebruikt waarvoor een scheduler moet worden gekoppeld aan de aanroepende context. Methoden binnen de CurrentScheduler klasse en functies van de PPL- en agents-lagen voeren doorgaans impliciete bijlagen uit.

U kunt ook expliciet een scheduler maken via de CurrentScheduler::Create methode of de Scheduler::Create methode.

~Planner

Een object van de klasse wordt impliciet vernietigd wanneer alle externe verwijzingen naar de Scheduler klasse niet meer bestaan.

virtual ~Scheduler();

ScheduleTask

Hiermee wordt een lichtgewicht taak binnen de planner gepland. De lichtgewicht taak wordt geplaatst in een planningsgroep die wordt bepaald door de runtime. De versie die de parameter _Placement gebruikt, zorgt ervoor dat de taak wordt bevooroordeeld bij het uitvoeren op de opgegeven locatie.

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data) = 0;

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement) = 0;

Parameterwaarden

_Proc
Een aanwijzer naar de functie die moet worden uitgevoerd om de inhoud van de lichtgewichttaak uit te voeren.

_Gegevens
Een lege pointer naar de gegevens die als parameter worden doorgegeven aan het kernonderdeel van de taak.

_Plaatsing
Een verwijzing naar een locatie waar de lichtgewicht taak wordt bevooroordeeld bij uitvoering.

SetDefaultSchedulerPolicy

Hiermee kan een door de gebruiker gedefinieerd beleid worden gebruikt om de standaardplanner te maken. Deze methode kan alleen worden aangeroepen wanneer er geen standaardplanner bestaat binnen het proces. Nadat een standaardbeleid is ingesteld, blijft dit van kracht totdat de volgende geldige oproep naar de methode SetDefaultSchedulerPolicyResetDefaultSchedulerPolicy wordt uitgevoerd.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parameterwaarden

_Beleid
Het beleid dat moet worden ingesteld als het standaard scheduler-beleid.

Opmerkingen

Als de SetDefaultSchedulerPolicy methode wordt aangeroepen wanneer er al een standaardplanner bestaat binnen het proces, genereert de runtime een default_scheduler_exists uitzondering.

Zie ook

concurrentie Namespace
Scheduler-klasse
PolicyElementKey
Taakplanner