IVirtualProcessorRoot::Deactivate-Methode
Veranlasst, dass der derzeit auf diesem virtuellen Prozessorstamm ausgeführte Threadproxy die Weiterleitung im Ausführungskontext beendet. Der Threadproxy setzt die Ausführung eines Aufrufs der Activate-Methode fort.
virtual bool Deactivate(
IExecutionContext * pContext
) =0;
Parameter
- pContext
Der Kontext, der gerade von diesem Stamm weitergeleitet wird.
Rückgabewert
Ein boolescher Wert. Der Wert true gibt an, dass der Threadproxy als Reaktion auf einen Aufruf der Activate-Methode aus der Deactivate-Methode zurückgekehrt ist. Der Wert false gibt an, dass der Threadproxy als Reaktion auf ein Benachrichtigungsereignis im Ressourcen-Manager aus der Methode zurückgekehrt ist. Auf einem im Benutzermodus planbaren (UMS) Threadplaner gibt dies an, dass Elemente zu der Vervollständigungsliste des Planers hinzugefügt wurden und der Planer diese verarbeiten muss.
Hinweise
Verwenden Sie diese Methode, um die Ausführung des Stamms eines virtuellen Prozessors vorübergehend anzuhalten, wenn Sie keine Arbeit im Planer finden. Ein Aufruf der Deactivate-Methode muss von innerhalb der Dispatch-Methode des Ausführungskontexts stattfinden, mit dem der virtuelle Prozessorstamm zuletzt aktiviert wurde. Anders ausgedrückt muss der Threadproxy, der die Deactivate-Methode aufruft, derjenige sein, der gerade auf dem virtuellen Prozessorstamm ausgeführt wird. Das Aufrufen der Methode für einen virtuellen Prozessorstamm, auf dem Sie nichts ausführen, kann zu nicht definiertem Verhalten führen.
Ein deaktivierter virtueller Prozessorstamm kann ggf. mit einem Aufruf der Activate-Methode aufgeweckt werden, bei dem dasselbe Argument wie beim Aufruf der Deactivate-Methode übergeben wird. Es ist Aufgabe des Planers sicherzustellen, dass Aufrufe der Activate-Methode und Deactivate-Methode paarweise erfolgen, aber nicht in einer bestimmten Reihenfolge empfangen werden müssen. Der Ressourcen-Manager kann einen Aufruf der Activate-Methode behandeln, bevor er einen Aufruf der Deactivate-Methode empfängt, für den er vorgesehen war.
Wenn ein virtueller Prozessorstamm aktiviert wird und der Rückgabewert von der Deactivate-Methode den Wert false hat, sollte der Planer die UMS-Vervollständigungsliste über die IUMSCompletionList::GetUnblockNotifications-Methode abfragen, nach diesen Informationen agieren, und anschließend erneut die Deactivate-Methode aufrufen. Dies sollte wiederholt werden, bis zu der Zeit, zu der die Deactivate-Methode den Wert true zurückgibt.
invalid_argument wird ausgelöst, wenn das Argument pContext den Wert NULL hat.
invalid_operation wird ausgelöst, wenn der virtuelle Prozessorstamm noch nie aktiviert wurde oder wenn das Argument pContext nicht den Ausführungskontext darstellt, der von diesem virtuellen Prozessorstamm zuletzt weitergeleitet wurde.
Durch das Deaktivieren eines virtuellen Prozessorstamms wird die Abonnementebene des zugrunde liegenden Hardwarethreads um eins verringert. Weitere Informationen zu Abonnementebenen finden Sie unter IExecutionResource::CurrentSubscriptionLevel.
Anforderungen
Header: concrtrm.h
Namespace: Concurrency
Siehe auch
Referenz
IVirtualProcessorRoot-Struktur
IVirtualProcessorRoot::Activate-Methode
IUMSCompletionList::GetUnblockNotifications-Methode