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.
Vertegenwoordigt een abstractie voor een uitvoeringscontext.
Syntaxis
class Context;
Leden
Beveiligde constructors
| Naam | Description |
|---|---|
| ~Contextdestructor |
Openbare methoden
| Naam | Description |
|---|---|
| blokkeren | Hiermee blokkeert u de huidige context. |
| CurrentContext | Retourneert een aanwijzer naar de huidige context. |
| GetId | Retourneert een id voor de context die uniek is binnen de scheduler waartoe de context behoort. |
| GetScheduleGroupId | Retourneert een identificator voor de planningsgroep waaraan de context momenteel werkt. |
| GetVirtualProcessorId | Retourneert een id voor de virtuele processor waarop de context momenteel wordt uitgevoerd. |
| Id | Retourneert een id voor de huidige context die uniek is binnen de planner waartoe de huidige context behoort. |
| IsCurrentTaskCollectionCanceling | Retourneert een indicatie of de taakverzameling die momenteel inline wordt uitgevoerd op de huidige context zich midden in een actieve annulering bevindt (of binnenkort). |
| IsSynchronouslyBlocked | Bepaalt of de context al dan niet synchroon wordt geblokkeerd. Een context wordt beschouwd als synchroon geblokkeerd als er expliciet een actie is uitgevoerd die heeft geleid tot blokkering. |
| Overinschrijven | Injecteert een extra virtuele processor in een scheduler voor de duur van een codeblok wanneer deze wordt aangeroepen in een context die wordt uitgevoerd op een van de virtuele processors in die scheduler. |
| ScheduleGroupId | Retourneert een identificatie voor de planningsgroep waarop de huidige context actief is. |
| Deblokkeren | Deblokkeert de context en zorgt ervoor dat deze kan worden uitgevoerd. |
| VirtualProcessorId | Retourneert een id voor de virtuele processor waarop de huidige context wordt uitgevoerd. |
| Opbrengst | Geeft uitvoering vrij zodat een andere context kan worden uitgevoerd. Als er geen andere context beschikbaar is om aan te geven, kan de scheduler naar een andere besturingssysteemthread overschakelen. |
Opmerkingen
De Concurrency Runtime scheduler (zie Scheduler) gebruikt uitvoeringscontexten om het werk dat door uw toepassing in de wachtrij is geplaatst, uit te voeren. Een Win32-thread is een voorbeeld van een uitvoeringscontext op een Windows-besturingssysteem.
Op elk gewenst moment is het gelijktijdigheidsniveau van een scheduler gelijk aan het aantal virtuele processors dat eraan wordt 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 scheduler is coöperatief van aard, en een uitvoeringscontext kan op elk gewenst moment zijn virtuele processor aan een andere context overdragen, als deze naar een wachtstand wil schakelen. Wanneer aan de voorwaarde van de wachttijd is voldaan, kan het niet worden hervat totdat een beschikbare virtuele processor van de scheduler het begint uit te voeren.
Overnamehiërarchie
Context
Requirements
Koptekst: concrt.h
Naamruimte: concurrentie
Block
Hiermee blokkeert u de huidige context.
static void __cdecl Block();
Opmerkingen
Met deze methode wordt de standaardplanner van het proces gemaakt en/of gekoppeld aan de aanroepende context als er momenteel geen scheduler is gekoppeld aan de aanroepende context.
Als de aanroepende context wordt uitgevoerd op een virtuele processor, vindt de virtuele processor een andere uitvoerbare context om uit te voeren of kan er mogelijk een nieuwe worden gemaakt.
Nadat de Block methode is aangeroepen of wordt aangeroepen, moet u deze koppelen met een aanroep naar de methode Deblokkeren vanuit een andere uitvoeringscontext om deze opnieuw uit te voeren. Houd er rekening mee dat er een kritieke periode is tussen het punt waar de code de context publiceert voor een andere thread om de Unblock methode aan te roepen en het punt waar de werkelijke methode-aanroep Block wordt gedaan. Gedurende deze periode mag u geen methode aanroepen die om zijn eigen redenen kan blokkeren en deblokkeren (bijvoorbeeld het verkrijgen van een vergrendeling). Aanroepen naar de Block en Unblock methode houden de reden voor het blokkeren en deblokkeren niet bij. Slechts één object mag eigenaar zijn van een Block- Unblock paar.
Deze methode kan verschillende uitzonderingen genereren, waaronder scheduler_resource_allocation_error.
~Context
virtual ~Context();
HuidigeContext
Retourneert een aanwijzer naar de huidige context.
static Context* __cdecl CurrentContext();
Retourwaarde
Een aanwijzer naar de huidige context.
Opmerkingen
Met deze methode wordt de standaardplanner van het proces gemaakt en/of gekoppeld aan de aanroepende context als er momenteel geen scheduler is gekoppeld aan de aanroepende context.
GetId
Retourneert een id voor de context die uniek is binnen de scheduler waartoe de context behoort.
virtual unsigned int GetId() const = 0;
Retourwaarde
Een id voor de context die uniek is binnen de scheduler waartoe de context behoort.
GetScheduleGroupId
Retourneert een identificator voor de planningsgroep waaraan de context momenteel werkt.
virtual unsigned int GetScheduleGroupId() const = 0;
Retourwaarde
Een id voor de planningsgroep waar de context momenteel aan werkt.
Opmerkingen
De retourwaarde van deze methode is een onmiddellijke momentopname van de planningsgroep waarin de context actief is. Als deze methode wordt aangeroepen voor een andere context dan de huidige context, kan de waarde verlopen zijn op het moment dat deze wordt geretourneerd en kan niet worden vertrouwd. Deze methode wordt doorgaans alleen gebruikt voor foutopsporing of traceringsdoeleinden.
GetVirtualProcessorId
Retourneert een id voor de virtuele processor waarop de context momenteel wordt uitgevoerd.
virtual unsigned int GetVirtualProcessorId() const = 0;
Retourwaarde
Als de context momenteel wordt uitgevoerd op een virtuele processor, een id voor de virtuele processor waarop de context momenteel wordt uitgevoerd; anders is de waarde -1.
Opmerkingen
De retourwaarde van deze methode is een onmiddellijke steekproef van de virtuele processor waarop de context wordt uitgevoerd. Deze waarde kan verlopen zijn op het moment dat deze wordt geretourneerd en kan niet worden vertrouwd. Deze methode wordt doorgaans alleen gebruikt voor foutopsporing of traceringsdoeleinden.
Identiteitsbewijs
Retourneert een id voor de huidige context die uniek is binnen de planner waartoe de huidige context behoort.
static unsigned int __cdecl Id();
Retourwaarde
Als de huidige context is gekoppeld aan een planner, een id voor de huidige context die uniek is binnen de planner waartoe de huidige context behoort; anders is de waarde -1.
IsCurrentTaskCollectionCanceling
Retourneert een indicatie of de taakverzameling die momenteel inline wordt uitgevoerd op de huidige context zich midden in een actieve annulering bevindt (of binnenkort).
static bool __cdecl IsCurrentTaskCollectionCanceling();
Retourwaarde
Als een scheduler is gekoppeld aan de aanroepende context en een taakgroep een inline taak uitvoert in die context, wordt aangegeven of die taakgroep zich midden in een actieve annulering bevindt (of dat binnenkort zal zijn); anders is de waarde false.
IsSynchroonGeblokkeerd
Bepaalt of de context al dan niet synchroon wordt geblokkeerd. Een context wordt beschouwd als synchroon geblokkeerd als er expliciet een actie is uitgevoerd die heeft geleid tot blokkering.
virtual bool IsSynchronouslyBlocked() const = 0;
Retourwaarde
Of de context synchroon wordt geblokkeerd.
Opmerkingen
Een context wordt beschouwd als synchroon geblokkeerd als er expliciet een actie is uitgevoerd die heeft geleid tot blokkering. In de thread scheduler zou dit duiden op een directe aanroep naar de Context::Block methode of een synchronisatieobject dat is gebouwd met behulp van de Context::Block methode.
De retourwaarde van deze methode is een onmiddellijk voorbeeld van of de context synchroon wordt geblokkeerd. Deze waarde kan verlopen zijn op het moment dat deze wordt geretourneerd en kan alleen worden gebruikt onder zeer specifieke omstandigheden.
operator verwijderen
Een Context object wordt intern vernietigd door de runtime. Het kan niet expliciet worden verwijderd.
void operator delete(void* _PObject);
Parameterwaarden
_PObject
Een aanwijzer naar het object dat moet worden verwijderd.
Oversubscriberen
Injecteert een extra virtuele processor in een scheduler voor de duur van een codeblok wanneer deze wordt aangeroepen in een context die wordt uitgevoerd op een van de virtuele processors in die scheduler.
static void __cdecl Oversubscribe(bool _BeginOversubscription);
Parameterwaarden
_BeginOversubscription
Als true, wordt aangegeven dat een extra virtuele processor moet worden toegevoegd gedurende de oversubscriptie. Als false, een indicatie dat de oversubscriptie moet eindigen en de eerder toegevoegde virtuele processor moet worden verwijderd.
SchemaGroepId
Retourneert een identificatie voor de planningsgroep waarop de huidige context actief is.
static unsigned int __cdecl ScheduleGroupId();
Retourwaarde
Als de huidige context is gekoppeld aan een scheduler en aan een planningsgroep werkt, is er een id voor de scheduler-groep waaraan de huidige context werkt; anders is de waarde -1.
Deblokkeren
Deblokkeert de context en zorgt ervoor dat deze kan worden uitgevoerd.
virtual void Unblock() = 0;
Opmerkingen
Het is volledig legaal voor een aanroep naar de Unblock-methode om vóór een bijbehorende aanroep van de Block-methode te komen. Zolang aanroepen naar de Block en Unblock methoden correct zijn gekoppeld, verwerkt de runtime de natuurlijke race van beide volgordes. Een Unblock oproep die plaatsvindt voordat een Block oproep, neutraliseert gewoon het effect van de Block oproep.
Er zijn verschillende uitzonderingen die kunnen worden gegenereerd op basis van deze methode. Als een context de Unblock methode op zichzelf probeert aan te roepen, wordt er een context_self_unblock uitzondering gegenereerd. Als aanroepen naar Block en Unblock niet goed zijn gekoppeld (bijvoorbeeld twee aanroepen Unblock die worden gedaan voor een context die momenteel wordt uitgevoerd), wordt er een context_unblock_unbalanced uitzondering gegenereerd.
Houd er rekening mee dat er een kritieke periode is tussen het punt waar de code de context publiceert voor een andere thread om de Unblock methode aan te roepen en het punt waar de werkelijke methode-aanroep Block wordt gedaan. Gedurende deze periode mag u geen methode aanroepen die om zijn eigen redenen kan blokkeren en deblokkeren (bijvoorbeeld het verkrijgen van een vergrendeling). Aanroepen naar de Block en Unblock methode houden de reden voor het blokkeren en deblokkeren niet bij. Slechts één object mag eigenaar zijn van een Block en Unblock paar.
VirtualProcessorId
Retourneert een id voor de virtuele processor waarop de huidige context wordt uitgevoerd.
static unsigned int __cdecl VirtualProcessorId();
Retourwaarde
Als de huidige context is gekoppeld aan een planner, een id voor de virtuele processor waarop de huidige context wordt uitgevoerd; anders is de waarde -1.
Opmerkingen
De retourwaarde van deze methode is een onmiddellijke steekproef van de virtuele processor waarop de huidige context wordt uitgevoerd. Deze waarde kan verlopen zijn op het moment dat deze wordt geretourneerd en kan niet worden vertrouwd. Deze methode wordt doorgaans alleen gebruikt voor foutopsporing of traceringsdoeleinden.
Opbrengst
Levert de uitvoering op, zodat een andere context kan worden uitgevoerd. Als er geen andere context beschikbaar is om voorrang aan te geven, kan de scheduler overgaan naar een andere thread van het besturingssysteem.
static void __cdecl Yield();
Opmerkingen
Met deze methode wordt de standaardplanner van het proces gemaakt en/of gekoppeld aan de aanroepende context als er momenteel geen scheduler is gekoppeld aan de aanroepende context.
YieldExecution
Geeft uitvoering vrij zodat een andere context kan worden uitgevoerd. Als er geen andere context beschikbaar is om aan te geven, kan de scheduler naar een andere besturingssysteemthread overschakelen.
static void __cdecl YieldExecution();
Opmerkingen
Met deze methode wordt de standaardplanner van het proces gemaakt en/of gekoppeld aan de aanroepende context als er momenteel geen scheduler is gekoppeld aan de aanroepende context.
Deze functie is nieuw in Visual Studio 2015 en is identiek aan de functie Rendement , maar conflicteert niet met de macro Opbrengst in Windows.h.