Partager via


IThreadProxy::SwitchTo, méthode

Exécute un changement de contexte coopératif du contexte en cours d'exécution.

virtual void SwitchTo(
   _Inout_ IExecutionContext * pContext,
   SwitchingProxyState switchState
) =0;

Paramètres

  • pContext
    Contexte d'exécution vers lequel basculer en coopération.

  • switchState
    Indique l'état du proxy de thread qui exécute le commutateur.Le paramètre est du type SwitchingProxyState.

Notes

Utilisez cette méthode pour basculer d'un contexte d'exécution à un autre, à partir de la méthode IExecutionContext::Dispatch du premier contexte d'exécution.La méthode associe le contexte d'exécution pContext à un proxy de thread s'il ne l'est pas déjà.La propriété du proxy de thread actuel est déterminée par la valeur que vous spécifiez pour l'argument switchState.

Utilisez la valeur Idle lorsque vous souhaitez renvoyer le proxy de thread actuellement exécuté au Gestionnaire des ressources.L'appel de SwitchTo avec le paramètre switchState défini sur Idle entraîne le démarrage de l'exécution du contexte d'exécution pContext sur la ressource d'exécution sous-jacente.La propriété de ce proxy de thread est transférée au Gestionnaire de ressources et vous devez retourner la méthode Dispatch du contexte d'exécution peu après avoir retourné SwitchTo, pour terminer le transfert.Le contexte d'exécution que le proxy de thread distribuait est dissocié du proxy de thread, et le planificateur est libre de le réutiliser ou de le détruire comme il lui semble approprié.

Utilisez la valeur Blocking lorsque vous souhaitez que ce proxy de thread entre dans un état bloqué.L'appel de SwitchTo avec le paramètre switchState défini sur Blocking entraîne le démarrage de l'exécution du contexte d'exécution pContext et le blocage du proxy de thread actuel jusqu'à sa reprise.Le planificateur conserve la propriété du proxy de thread lorsque le proxy de thread est dans l'état Blocking.Le proxy de thread bloquant peut être relancé en appelant la fonction SwitchTo pour basculer sur le contexte d'exécution de ce proxy de thread.Vous pouvez également reprendre le proxy de thread, en utilisant son contexte associé pour activer une racine de processeur virtuel.Pour plus d'informations sur la façon d'effectuer cette opération, consultez IVirtualProcessorRoot::Activate.

Utilisez la valeur Nesting lorsque vous souhaitez détacher temporairement ce proxy de thread de la racine de processeur virtuel sur laquelle il s'exécute et le planificateur pour lequel il distribue le travail.L'appel de SwitchTo avec le paramètre switchState défini sur Nesting entraîne le démarrage de l'exécution du contexte d'exécution pContext et la poursuite de l'exécution du proxy de thread actuel sans nécessiter de racine de processeur virtuel.Le proxy de thread est considéré avoir quitté le planificateur jusqu'à ce qu'il appelle la méthode IThreadProxy::SwitchOut ultérieurement.La méthode IThreadProxy::SwitchOut pourrait bloquer le proxy de thread jusqu'à ce qu'une racine de processeur virtuel soit disponible pour le replanifier.

SwitchTo doit être appelé dans l'interface IThreadProxy qui représente le thread en cours d'exécution, sinon les résultats seront indéfinis.La fonction lève invalid_argument si le paramètre pContext a la valeur NULL.

Configuration requise

En-tête : concrtrm.h

Accès concurrentiel del'espace de noms :

Voir aussi

Référence

IThreadProxy, structure

SwitchingProxyState, énumération