Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Stellt eine Abstraktion für einen Ausführungskontext dar.
Syntax
class Context;
Mitglieder
Geschützte Konstruktoren
| Name | Beschreibung |
|---|---|
| ~Context Destructor |
Öffentliche Methoden
| Name | Beschreibung |
|---|---|
| Blockieren | Blockiert den aktuellen Kontext. |
| CurrentContext | Gibt einen Zeiger auf den aktuellen Kontext zurück. |
| GetId | Gibt einen Bezeichner für den Kontext zurück, der innerhalb des Planers eindeutig ist, zu dem der Kontext gehört. |
| GetScheduleGroupId | Gibt einen Bezeichner für die Planungsgruppe zurück, an der der Kontext gerade arbeitet. |
| GetVirtualProcessorId | Gibt einen Bezeichner für den virtuellen Prozessor zurück, auf dem der Kontext gerade ausgeführt wird. |
| Id | Gibt einen Bezeichner für den aktuellen Kontext zurück, der innerhalb des Planers, dem der aktuelle Kontext zugehörig ist, eindeutig ist. |
| WirdAktuelleAufgabenSammlungAbgebrochen | Gibt an, ob die Aufgabensammlung, die gerade inline für den aktuellen Kontext ausgeführt wird, sich mitten in einem aktiven Abbruch befindet (oder sich bald darin befinden wird). |
| IsSynchronouslyBlocked | Bestimmt, ob der Kontext synchron blockiert wird oder nicht. Ein Kontext wird als synchron blockiert angesehen, wenn er explizit eine zu einer Blockierung führende Aktion ausgeführt hat. |
| Überbuchen | Fügt einem Scheduler für die Dauer eines Codeblocks einen zusätzlichen virtuellen Prozessor hinzu, wenn es in einem Kontext aufgerufen wird, der auf einem der virtuellen Prozessoren dieses Schedulers ausgeführt wird. |
| ScheduleGroupId | Gibt einen Bezeichner für die Zeitplangruppe zurück, an der der aktuelle Kontext arbeitet. |
| Entblocken | Hebt die Blockierung des Kontexts auf und bewirkt, dass er ausführbar wird. |
| VirtualProcessorId | Gibt einen Bezeichner für den virtuellen Prozessor zurück, auf dem der aktuelle Kontext ausgeführt wird. |
| Yield | Gibt die Ausführung frei, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext verfügbar ist, an den gewechselt werden kann, kann der Planer zu einem anderen Betriebssystem-Thread wechseln. |
Hinweise
Der Parallelitätslaufzeit-Planer (siehe Scheduler) verwendet Ausführungskontexte, um die Arbeit, die von Ihrer Anwendung in die Warteschlange gestellt wurde, auszuführen. Ein Win32-Thread ist ein Beispiel für einen Ausführungskontext auf einem Windows-Betriebssystem.
Der Nebenläufigkeitsgrad eines Planers ist zu jeder Zeit gleich der Anzahl virtueller Prozessoren, die ihm vom Ressourcen-Manager gewährt wird. Ein virtueller Prozessor ist eine Abstraktion für eine Verarbeitungsressource und wird einem Hardwarethread des zugrunde liegenden Systems zugeordnet. Nur ein einzelner Planerkontext kann jeweils auf einem virtuellen Prozessor ausgeführt werden.
Der Planer ist grundsätzlich kooperativ, und ein Ausführungskontext kann seinen virtuellen Prozessor jederzeit für einen anderen Kontext freigeben, wenn er in einen Wartezustand wechseln möchte. Wenn die Wartebedingung erfüllt ist, kann keine Fortsetzung erfolgen, bis ein verfügbarer virtueller Prozessor vom Scheduler mit der Ausführung beginnt.
Vererbungshierarchie
Context
Anforderungen
Kopfzeile: concrt.h
Namespace: Parallelität
Blockieren
Blockiert den aktuellen Kontext.
static void __cdecl Block();
Hinweise
Diese Methode führt dazu, dass der Standardplaner des Prozesses erstellt und/oder an den aufrufenden Kontext angefügt wird, wenn derzeit dem aufrufenden Kontext kein Planer zugeordnet ist.
Wenn der aufrufende Kontext auf einem virtuellen Prozessor ausgeführt wird, findet der virtuelle Prozessor einen anderen ausgeführten Kontext, der ausgeführt werden kann, oder kann potenziell einen neuen erstellen.
Nachdem die Block Methode aufgerufen wurde oder aufgerufen wird, müssen Sie sie mit einem Aufruf der Unblock-Methode aus einem anderen Ausführungskontext koppeln, damit sie erneut ausgeführt werden kann. Beachten Sie, dass es einen kritischen Zeitraum zwischen dem Punkt gibt, an dem Ihr Code seinen Kontext für einen anderen Thread veröffentlicht, um die Unblock Methode und den Punkt, an dem der tatsächliche Methodenaufruf Block erfolgt, aufrufen zu können. Während dieses Zeitraums dürfen Sie keine Methode aufrufen, die ihrerseits aus spezifischen Gründen blockieren und freigeben kann (z. B. das Erwerben einer Sperre). Aufrufe an die Block und Unblock Methoden verfolgen nicht den Grund für das Blockieren und Aufheben der Blockierung. Nur ein Objekt sollte über den Besitz eines Block- Unblock Paars verfügen.
Diese Methode kann eine Vielzahl von Ausnahmen auslösen, einschließlich scheduler_resource_allocation_error.
~Zusammenhang
virtual ~Context();
CurrentContext
Gibt einen Zeiger auf den aktuellen Kontext zurück.
static Context* __cdecl CurrentContext();
Rückgabewert
Ein Zeiger auf den aktuellen Kontext.
Hinweise
Diese Methode führt dazu, dass der Standardplaner des Prozesses erstellt und/oder an den aufrufenden Kontext angefügt wird, wenn derzeit dem aufrufenden Kontext kein Planer zugeordnet ist.
GetId
Gibt einen Bezeichner für den Kontext zurück, der innerhalb des Planers eindeutig ist, zu dem der Kontext gehört.
virtual unsigned int GetId() const = 0;
Rückgabewert
Ein Bezeichner für den Kontext, der innerhalb des Schedulers eindeutig ist, zu dem der Kontext gehört.
GetScheduleGroupId
Gibt einen Bezeichner für die Planungsgruppe zurück, an der der Kontext gerade arbeitet.
virtual unsigned int GetScheduleGroupId() const = 0;
Rückgabewert
Ein Bezeichner für die Zeitplangruppe, an der der Kontext derzeit arbeitet.
Hinweise
Der Rückgabewert dieser Methode ist ein sofortiges Sampling der Zeitplangruppe, für die der Kontext ausgeführt wird. Wenn diese Methode in einem anderen Kontext als dem aktuellen Kontext aufgerufen wird, kann der Wert zu dem Zeitpunkt, an dem er zurückgegeben wird, bereits veraltet sein und man kann sich nicht darauf verlassen. In der Regel wird diese Methode nur für Debugging- oder Ablaufverfolgungszwecke verwendet.
GetVirtualProcessorId
Gibt einen Bezeichner für den virtuellen Prozessor zurück, auf dem der Kontext gerade ausgeführt wird.
virtual unsigned int GetVirtualProcessorId() const = 0;
Rückgabewert
Wenn der Kontext derzeit auf einem virtuellen Prozessor ausgeführt wird, gibt es einen Bezeichner für diesen virtuellen Prozessor an. Andernfalls ist der Wert -1.
Hinweise
Der Rückgabewert dieser Methode ist ein sofortiges Sampling des virtuellen Prozessors, für den der Kontext ausgeführt wird. Dieser Wert kann veraltet sein, sobald er zurückgegeben wird, und kann nicht darauf vertraut werden. In der Regel wird diese Methode nur für Debugging- oder Ablaufverfolgungszwecke verwendet.
ID
Gibt einen Bezeichner für den aktuellen Kontext zurück, der innerhalb des Planers, dem der aktuelle Kontext zugehörig ist, eindeutig ist.
static unsigned int __cdecl Id();
Rückgabewert
Wenn der aktuelle Kontext einem Scheduler zugeordnet ist, gibt es einen eindeutigen Bezeichner für diesen Kontext innerhalb des Schedulers; andernfalls hat er den Wert -1.
WirdAktuelleAufgabensammlungAbgebrochen
Gibt an, ob die Aufgabensammlung, die gerade inline für den aktuellen Kontext ausgeführt wird, sich mitten in einem aktiven Abbruch befindet (oder sich bald darin befinden wird).
static bool __cdecl IsCurrentTaskCollectionCanceling();
Rückgabewert
Wenn ein Scheduler mit dem aufrufenden Kontext verknüpft ist und eine Aufgabengruppe eine Aufgabe inline in diesem Kontext ausführt, wird angezeigt, ob sich diese Aufgabengruppe im Prozess eines aktiven Abbruchs befindet (oder sich in Kürze befinden wird), andernfalls der Wert false.
IstSynchronGesperrt
Bestimmt, ob der Kontext synchron blockiert wird oder nicht. Ein Kontext wird als synchron blockiert angesehen, wenn er explizit eine zu einer Blockierung führende Aktion ausgeführt hat.
virtual bool IsSynchronouslyBlocked() const = 0;
Rückgabewert
Gibt an, ob der Kontext synchron blockiert wird.
Hinweise
Ein Kontext wird als synchron blockiert angesehen, wenn er explizit eine zu einer Blockierung führende Aktion ausgeführt hat. Im Threadplaner würde dies einen direkten Aufruf der Context::Block Methode oder eines Synchronisierungsobjekts angeben, das mit der Context::Block Methode erstellt wurde.
Der Rückgabewert dieser Methode ist ein sofortiges Beispiel dafür, ob der Kontext synchron blockiert wird. Dieser Wert kann veraltet sein, wenn er zurückgegeben wird und nur unter sehr bestimmten Umständen verwendet werden kann.
Operator löschen
Ein Context Objekt wird intern durch die Laufzeit zerstört. Sie kann nicht explizit gelöscht werden.
void operator delete(void* _PObject);
Parameter
_PObject
Ein Zeiger auf das zu löschende Objekt.
Überabonnement
Fügt einem Scheduler für die Dauer eines Codeblocks einen zusätzlichen virtuellen Prozessor hinzu, wenn es in einem Kontext aufgerufen wird, der auf einem der virtuellen Prozessoren dieses Schedulers ausgeführt wird.
static void __cdecl Oversubscribe(bool _BeginOversubscription);
Parameter
_BeginOversubscription
Wenn true, ein Hinweis darauf, dass ein zusätzlicher virtueller Prozessor für die Dauer der Überabonnierung hinzugefügt werden soll. Wenn false, ein Hinweis darauf, dass die Überschreibung enden sollte und der zuvor hinzugefügte virtuelle Prozessor entfernt werden sollte.
ZeitplanGruppenId
Gibt einen Bezeichner für die Zeitplangruppe zurück, an der der aktuelle Kontext arbeitet.
static unsigned int __cdecl ScheduleGroupId();
Rückgabewert
Wenn der aktuelle Kontext an einen Zeitplaner angefügt ist und an einer Terminplangruppe arbeitet, dann handelt es sich um einen Bezeichner für die Terminplangruppe, an der der aktuelle Kontext arbeitet; andernfalls ist der Wert -1.
Entsperren
Hebt die Blockierung des Kontexts auf und bewirkt, dass er ausführbar wird.
virtual void Unblock() = 0;
Hinweise
Es ist vollkommen zulässig, dass ein Aufruf der Unblock Methode vor einem entsprechenden Aufruf der Block-Methode erfolgt. Solange Aufrufe der Block und Unblock Methoden ordnungsgemäß gekoppelt sind, behandelt die Laufzeitumgebung den natürlichen Wettlauf der beiden Abläufe ordnungsgemäß. Ein Unblock Anruf, der vor einem Block Anruf kommt, negiert einfach die Auswirkung des Block Anrufs.
Es gibt mehrere Ausnahmen, die von dieser Methode ausgelöst werden können. Wenn ein Kontext versucht, die Unblock Methode selbst aufzurufen, wird eine context_self_unblock Ausnahme ausgelöst. Wenn Aufrufe an Block und Unblock nicht ordnungsgemäß gekoppelt sind (z. B. werden zwei Aufrufe Unblock für einen Kontext ausgeführt, der derzeit ausgeführt wird), wird eine context_unblock_unbalanced Ausnahme ausgelöst.
Beachten Sie, dass es einen kritischen Zeitraum zwischen dem Punkt gibt, an dem Ihr Code seinen Kontext für einen anderen Thread veröffentlicht, um die Unblock Methode und den Punkt, an dem der tatsächliche Methodenaufruf Block erfolgt, aufrufen zu können. Während dieses Zeitraums dürfen Sie keine Methode aufrufen, die ihrerseits aus spezifischen Gründen blockieren und freigeben kann (z. B. das Erwerben einer Sperre). Aufrufe an die Block und Unblock Methoden verfolgen nicht den Grund für das Blockieren und Aufheben der Blockierung. Ein Objekt sollte die Eigentumsrechte an einem Block- und Unblock-Paar haben.
VirtualProcessorId
Gibt einen Bezeichner für den virtuellen Prozessor zurück, auf dem der aktuelle Kontext ausgeführt wird.
static unsigned int __cdecl VirtualProcessorId();
Rückgabewert
Wenn der aktuelle Kontext an einen Scheduler angefügt ist, wird ein Bezeichner für den virtuellen Prozessor, auf dem der aktuelle Kontext ausgeführt wird, ausgeführt. andernfalls der Wert -1.
Hinweise
Der Rückgabewert dieser Methode ist ein sofortiges Sampling des virtuellen Prozessors, für den der aktuelle Kontext ausgeführt wird. Dieser Wert kann veraltet sein, sobald er zurückgegeben wird, und kann nicht darauf vertraut werden. In der Regel wird diese Methode nur für Debugging- oder Ablaufverfolgungszwecke verwendet.
Ertrag
Gibt die Ausführung frei, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext verfügbar ist, an den gewechselt werden kann, kann der Planer zu einem anderen Betriebssystem-Thread wechseln.
static void __cdecl Yield();
Hinweise
Diese Methode führt dazu, dass der Standardplaner des Prozesses erstellt und/oder an den aufrufenden Kontext angefügt wird, wenn derzeit dem aufrufenden Kontext kein Planer zugeordnet ist.
Ausführungsfreigabe
Gibt die Ausführung frei, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext verfügbar ist, an den gewechselt werden kann, kann der Planer zu einem anderen Betriebssystem-Thread wechseln.
static void __cdecl YieldExecution();
Hinweise
Diese Methode führt dazu, dass der Standardplaner des Prozesses erstellt und/oder an den aufrufenden Kontext angefügt wird, wenn derzeit dem aufrufenden Kontext kein Planer zugeordnet ist.
Diese Funktion ist neu in Visual Studio 2015 und ist identisch mit der Funktion "Ertrag ", steht jedoch nicht im Konflikt mit dem Ertragsmakro in Windows.h.