Freigeben über


Context-Klasse

Stellt eine Abstraktion für einen Ausführungskontext dar.

Syntax

class Context;

Member

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 eindeutig ist, zu dem der aktuelle Kontext gehört.
IsCurrentTaskCollectionCanceling Gibt zurück, ob die Aufgabenauflistung, die gerade inline für den aktuellen Kontext ausgeführt wird, in diesem Moment (oder in Kürze) einen Abbruch durchführt.
IsSynchronouslyBlocked Bestimmt, ob der Kontext synchron blockiert ist. Ein Kontext wird als synchron blockiert angesehen, wenn er explizit eine zu einer Blockierung führende Aktion ausgeführt hat.
Überzeichnen Fügt einen zusätzlichen virtuellen Prozessor für die Dauer eines Codeblocks in einen Planer ein, wenn er für einen Kontext aufgerufen wird, der auf einem der virtuellen Prozessoren in diesem Planer ausgeführt wird.
ScheduleGroupId Gibt einen Bezeichner für die Planungsgruppe 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 Setzt die Ausführung aus, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext für eine Übergabe verfügbar ist, kann der Planer ggf. an einen anderen Betriebssystemthread übergeben.

Hinweise

Der Zeitplan für die Parallelitätslaufzeit (siehe Scheduler) verwendet Ausführungskontexte, um die von Ihrer Anwendung in die Warteschlange eingereihte Arbeit auszuführen. Ein Win32-Thread ist ein Beispiel für einen Ausführungskontext auf einem Windows-Betriebssystem.

Die Nebenläufigkeitsebene eines Planers ist immer gleich der Anzahl virtueller Prozessoren, die vom Ressourcen-Manager gewährt wurden. 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 der Wartevorgang erfüllt wurde, kann solange keine Fortsetzung erfolgen, bis ein verfügbarer virtueller Prozessor vom Planer 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 wiederum aus eigenen Gründen blockieren und entsperren kann (z. B. das Abrufen einer Sperre). Aufrufe an die Block Und Unblock Methode 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 für einen anderen Kontext als den aktuellen Kontext aufgerufen wird, kann der Wert veraltet sein, wenn er zurückgegeben wird und nicht darauf vertrauen kann. 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, wird ein Bezeichner für den virtuellen Prozessor, auf dem der Kontext derzeit 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 Kontext ausgeführt wird. Dieser Wert kann veraltet sein, wenn er zurückgegeben wird und nicht darauf vertrauen kann. In der Regel wird diese Methode nur für Debugging- oder Ablaufverfolgungszwecke verwendet.

Kennung

Gibt einen Bezeichner für den aktuellen Kontext zurück, der innerhalb des Planers eindeutig ist, zu dem der aktuelle Kontext gehört.

static unsigned int __cdecl Id();

Rückgabewert

Wenn der aktuelle Kontext einem Scheduler zugeordnet ist, ist ein Bezeichner für den aktuellen Kontext, der innerhalb des Schedulers eindeutig ist, zu dem der aktuelle Kontext gehört; andernfalls der Wert -1.

IsCurrentTaskCollectionCanceling

Gibt zurück, ob die Aufgabenauflistung, die gerade inline für den aktuellen Kontext ausgeführt wird, in diesem Moment (oder in Kürze) einen Abbruch durchführt.

static bool __cdecl IsCurrentTaskCollectionCanceling();

Rückgabewert

Wenn ein Scheduler mit dem aufrufenden Kontext verknüpft ist und eine Aufgabengruppe einen Vorgang inline in diesem Kontext ausführt, wird angegeben, ob sich diese Aufgabengruppe inmitten eines aktiven Abbruchs befindet (oder kurz sein wird); andernfalls der Wert false.

IsSynchronouslyBlocked

Bestimmt, ob der Kontext synchron blockiert ist. 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 delete

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.

Überzeichnen

Fügt einen zusätzlichen virtuellen Prozessor für die Dauer eines Codeblocks in einen Planer ein, wenn er für einen Kontext aufgerufen wird, der auf einem der virtuellen Prozessoren in diesem Planer 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 Überschreibung hinzugefügt werden soll. Wenn false, ein Hinweis darauf, dass die Überschreibung enden sollte und der zuvor hinzugefügte virtuelle Prozessor entfernt werden sollte.

ScheduleGroupId

Gibt einen Bezeichner für die Planungsgruppe 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, ist ein Bezeichner für die Planergruppe, an der der aktuelle Kontext arbeitet; andernfalls 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 Laufzeit das natürliche Rennen einer der beiden Sortierungen 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 wiederum aus eigenen Gründen blockieren und entsperren kann (z. B. das Abrufen einer Sperre). Aufrufe an die Block Und Unblock Methode verfolgen nicht den Grund für das Blockieren und Aufheben der Blockierung. Nur ein Objekt sollte über den Besitz eines Und-Paares Block Unblock verfügen.

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, wenn er zurückgegeben wird und nicht darauf vertrauen kann. In der Regel wird diese Methode nur für Debugging- oder Ablaufverfolgungszwecke verwendet.

Yield

Setzt die Ausführung aus, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext für eine Übergabe verfügbar ist, kann der Planer ggf. an einen anderen Betriebssystemthread übergeben.

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.

YieldExecution

Setzt die Ausführung aus, damit ein anderer Kontext ausgeführt werden kann. Wenn kein anderer Kontext für eine Übergabe verfügbar ist, kann der Planer ggf. an einen anderen Betriebssystemthread übergeben.

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.

Siehe auch

Concurrency-Namespace
Scheduler-Klasse
Aufgabenplanung