Partager via


IVirtualProcessorRoot::Deactivate, méthode

Implique que le proxy de thread qui s'exécute actuellement sur cette racine de processeur virtuel arrête de distribuer le contexte d'exécution. Le proxy de thread reprendra l'exécution au moment de l'appel à la méthode Activate.

virtual bool Deactivate(
   _Inout_ IExecutionContext * pContext
) =0;

Paramètres

  • pContext
    Contexte actuellement distribué par cette racine.

Valeur de retour

Valeur booléenne. Une valeur true indique que le proxy de thread a été retourné de la méthode Deactivate en réponse à un appel à la méthode Activate. Une valeur false indique que le proxy de thread a été retourné de la méthode en réponse à un événement de notification dans le Gestionnaire des ressources. Dans un planificateur de thread UMS, cela indique que les éléments apparaissent dans la liste de saisie semi-automatique du planificateur et que le planificateur doit les gérer.

Notes

Utilisez cette méthode pour arrêter temporairement l'exécution d'une racine de processeur virtuel lorsque vous ne pouvez pas trouver de travail dans votre planificateur. Un appel à la méthode Deactivate doit provenir de l'intérieur de la méthode Dispatch du contexte d'exécution avec lequel la racine de processeur virtuel a été activée en dernier. En d'autres termes, le proxy de thread qui appelle la méthode Deactivate doit être celui qui s'exécute actuellement sur la racine de processeur virtuel. Le fait d'appeler la méthode sur une racine de processeur virtuel non utilisée pour l'exécution peut entraîner un comportement non défini.

Une racine de processeur virtuel désactivée peut être réveillée par un appel à la méthode Activate, avec le même argument qui a été passé à la méthode Deactivate. Le planificateur est chargé de la vérification que les appels aux méthodes Activate et Deactivate sont associés, mais ils ne doivent pas obligatoirement être reçus dans un ordre spécifique. Le Gestionnaire des ressources peut gérer la réception d'un appel à la méthode Activate avant de recevoir un appel à la méthode Deactivate.

Si une racine de processeur virtuel sort de l'état de veille et si la valeur de retour de la méthode Deactivate est la valeur false, le planificateur doit interroger la liste de saisie semi-automatique UMS via la méthode IUMSCompletionList::GetUnblockNotifications, agir sur ces informations, puis appeler à nouveau la méthode Deactivate. Cela doit être répété jusqu'à ce que la méthode Deactivate retourne la valeur true.

invalid_argument est levé si l'argument pContext a la valeur NULL.

invalid_operation est levé si la racine de processeur virtuel n'a jamais été activée, ou l'argument pContext ne représente pas le contexte d'exécution ayant été distribué le plus récemment par cette racine de processeur virtuel.

L'acte de désactivation d'une racine de processeur virtuel diminue le niveau d'abonnement du thread matériel sous-jacent de 1. Pour plus d'informations sur les niveaux d'abonnement, consultez IExecutionResource::CurrentSubscriptionLevel.

Configuration requise

En-tête : concrtrm.h

Accès concurrentiel del'espace de noms :

Voir aussi

Référence

IVirtualProcessorRoot, structure

IVirtualProcessorRoot::Activate, méthode

IExecutionResource::CurrentSubscriptionLevel, méthode

IUMSCompletionList::GetUnblockNotifications, méthode