IThreadProxy::SwitchOut, méthode
Dissocie le contexte de la racine sous-jacente du processeur virtuel.
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
Paramètres
- switchState
Indique l'état du proxy de thread qui exécute le commutateur. Le paramètre est du type SwitchingProxyState.
Notes
Utilisez SwitchOut si vous devez dissocier un contexte de la racine du processeur virtuel sur laquelle il s'exécute, quel que soit la raison. Selon la valeur que vous passez dans le paramètre switchState, et s'il s'exécute sur une racine du processeur virtuel ou non, l'appel retourne immédiatement ou bloque le proxy de thread associé au contexte. Il est erroné d'appeler SwitchOut avec le jeu de paramètres réglé à Idle. Cela entraînera une exception invalid_argument.
SwitchOut est utile lorsque vous souhaitez réduire le nombre de racines de processeur virtuel de votre planificateur, soit parce que le Gestionnaire des ressources vous a demandé de le faire, soit parce que vous avez demandé une racine de processeur virtuel sursouscrite temporaire que vous n'en avez plus besoin. Dans ce cas appelez la méthode IVirtualProcessorRoot::Remove Method sur la racine de processeur virtuel, avant de faire un appel à SwitchOut avec le paramètre switchState à la valeur Blocking. Cela bloquera le proxy de thread et il reprendra l'exécution lorsqu'une racine de processeur virtuel différente dans le planificateur est disponible pour l'exécuter. 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.
SwitchOut peut également être utilisé lorsque vous souhaitez réinitialiser le processeur virtuel afin qu'il puisse être activé à l'avenir en bloquant le proxy de thread ou en le détachant temporairement de la racine du processeur virtuel sur lequel il s'exécute, et le planificateur pour lequel il distribue le travail. Utilisez SwitchOut avec le paramètre switchState à la valeur Blocking si vous voulez bloquer le proxy de thread. Il peut ensuite être redémarré en utilisant SwitchTo ou IVirtualProcessorRoot::Activate comme mentionné ci-dessus. Utilisez SwitchOut avec le jeu de paramètres réglé à Nesting lorsque vous souhaitez détacher temporairement ce proxy de thread de la racine de processeur virtuel sur lequel il s'exécute, et le planificateur auquel le processeur virtuel est associé. L'appel de SwitchOut avec le paramètre switchState défini à Nesting pendant son exécution sur une racine du processeur virtuel entraîne la réinitialisation de la racine, et le proxy du thread actuel continuera à s'exécuter sans nécessiter de racine. Le proxy de thread est considéré avoir quitté le planificateur jusqu'à ce qu'il appelle la méthode IThreadProxy::SwitchOut grâce Blocking à ultérieurement. Le deuxième appel à SwitchOut avec le jeu de paramètres réglé à Blocking est conçu pour retourner le contexte d'un état bloqué afin qu'il puisse être repris par SwitchTo ou IVirtualProcessorRoot::Activate dans le planificateur dont il est détaché. Comme il ne s'exécutait pas sur une racine du processeur virtuel, aucune réinitialisation n'est effectué.
Une racine de processeur virtuel réinitialisée n'est aucunement différente d'une racine de processeur virtuel toute neuve que votre planificateur a été accordé par le gestionnaire de ressources. Utilisez-le pour l'exécution en l'activant avec un contexte d'exécution en utilisant IVirtualProcessorRoot::Activate.
SwitchOut doit être appelé dans l'interface IThreadProxy qui représente le thread en cours d'exécution, sinon les résultats seront indéfinis.
Dans les bibliothèques et les en-têtes fournis avec Visual Studio 2010, cette méthode ne prenait pas de paramètre et n'a pas réinitialisé la racine du processeur virtuel. Pour conserver l'ancien comportement, la valeur de paramètre par défaut de Blocking est fournie.
Configuration requise
En-tête : concrtrm.h
Espace de noms : concurrency