IThreadProxy, structure
Abstraction d'un thread d'exécution. Selon la clé de stratégie SchedulerType
du planificateur que vous créez, le gestionnaire des ressources vous accorde un proxy de thread assorti d'un thread Win32 standard ou d'un thread UMS (User-Mode Scheduling). Les threads UMS sont pris en charge sur les systèmes d'exploitation 64 bits avec Windows 7 et ses versions ultérieures.
Syntaxe
struct IThreadProxy;
Membres
Méthodes publiques
Nom | Description |
---|---|
IThreadProxy ::GetId | Retourne un identificateur unique pour le proxy de thread. |
IThreadProxy ::SwitchOut | Dissocie le contexte de la racine sous-jacente du processeur virtuel. |
IThreadProxy ::SwitchTo | Effectue un changement de contexte coopératif du contexte en cours d’exécution vers un autre. |
IThreadProxy ::YieldToSystem | Oblige le thread appelant à céder l'exécution à un autre thread prêt à s'exécuter sur le processeur actuel. Le système d’exploitation sélectionne le thread suivant à exécuter. |
Notes
Les proxys de thread sont couplés aux contextes d’exécution représentés par l’interface IExecutionContext
comme moyen de distribuer le travail.
Hiérarchie d'héritage
IThreadProxy
Spécifications
En-tête : concrtrm.h
Espace de noms : concurrency
IThreadProxy ::GetId, méthode
Retourne un identificateur unique pour le proxy de thread.
virtual unsigned int GetId() const = 0;
Valeur de retour
Identificateur entier unique.
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 de type SwitchingProxyState
.
Notes
Utilisez SwitchOut
si vous devez dissocier un contexte de la racine du processeur virtuel sur laquelle il s'exécute, quelle que soit la raison. Selon la valeur que vous passez dans le paramètre switchState
, et peu importe s'il s'exécute ou non sur une racine du processeur virtuel, l'appel retourne immédiatement ou bloque le proxy de thread associé au contexte. C'est une erreur que d'appeler SwitchOut
avec le jeu de paramètres défini sur Idle
. Cela entraîne 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 et que vous n'en avez plus besoin. Dans ce cas, vous devez appeler la méthode IVirtualProcessorRoot ::Remove sur la racine du processeur virtuel, avant d’effectuer un appel avec SwitchOut
le paramètre switchState
défini sur Blocking
. Cela bloquera le proxy de thread et il reprendra l'exécution lorsqu'une racine de processeur virtuel différente dans le planificateur sera disponible pour l'exécuter. Le proxy de thread bloquant peut être repris en appelant la fonction SwitchTo
pour basculer vers 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 procédure à suivre, 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 du planificateur pour lequel il distribue le travail. Utilisez SwitchOut
avec le paramètre switchState
défini sur 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 défini sur Nesting
lorsque vous souhaitez détacher temporairement ce proxy de thread de la racine de processeur virtuel sur lequel il s'exécute, et du planificateur auquel le processeur virtuel est associé. Appeler SwitchOut
avec le paramètre switchState
défini sur Nesting
pendant son exécution sur une racine du processeur virtuel entraînera 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é comme ayant quitté le planificateur jusqu’à ce qu’il appelle la méthode IThreadProxy ::SwitchOut à Blocking
un moment ultérieur dans le temps. Le deuxième appel à SwitchOut
avec le jeu de paramètres défini sur Blocking
est conçu pour retourner le contexte vers 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ée.
Une racine de processeur virtuel réinitialisée n'est aucunement différente d'une racine de processeur virtuel toute neuve qui a été accordée à votre planificateur par le gestionnaire de ressources. Vous pouvez l'utiliser pour exécution en l'activant avec un contexte d'exécution en utilisant IVirtualProcessorRoot::Activate
.
SwitchOut
doit être appelé sur l’interface IThreadProxy
qui représente le thread en cours d’exécution ou les résultats ne sont pas dé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 ne réinitialisait pas la racine du processeur virtuel. Pour conserver l'ancien comportement, la valeur de paramètre par défaut de Blocking
est fournie.
IThreadProxy ::SwitchTo, méthode
Effectue un changement de contexte coopératif du contexte en cours d’exécution vers un autre.
virtual void SwitchTo(
_Inout_ IExecutionContext* pContext,
SwitchingProxyState switchState) = 0;
Paramètres
pContext
Contexte d’exécution vers lequel basculer de manière coopérative.
switchState
Indique l’état du proxy de thread qui exécute le commutateur. Le paramètre est de type SwitchingProxyState
.
Notes
Utilisez cette méthode pour passer d’un contexte d’exécution à un autre, de la méthode IExecutionContext ::D ispatch du premier contexte d’exécution. La méthode associe le contexte pContext
d’exécution à un proxy de thread s’il n’en est pas déjà associé. 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 en cours d’exécution à Resource Manager. L’appel SwitchTo
avec le paramètre switchState
défini pour Idle
provoquera l’exécution du contexte pContext
d’exécution sur la ressource d’exécution sous-jacente. La propriété de ce proxy de thread est transférée vers Resource Manager et vous êtes censé retourner à partir de la méthode du contexte d’exécution Dispatch
peu après SwitchTo
le retour, afin de terminer le transfert. Le contexte d’exécution que le proxy de thread a distribué est dissocié du proxy de thread, et le planificateur est libre de le réutiliser ou de le détruire comme il convient.
Utilisez la valeur Blocking
lorsque vous souhaitez que ce proxy de thread entre un état bloqué. L’appel SwitchTo
avec le paramètre switchState
défini pour Blocking
provoquera l’exécution du contexte pContext
d’exécution et bloquera le proxy de thread actuel jusqu’à ce qu’il soit repris. 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 repris en appelant la fonction SwitchTo
pour basculer vers 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 procédure à suivre, consultez IVirtualProcessorRoot ::Activate.
Utilisez la valeur Nesting
lorsque vous souhaitez détacher temporairement ce proxy de thread de la racine du processeur virtuel sur laquelle il s’exécute, et le planificateur pour lequel il répartit le travail. L’appel SwitchTo
avec le jeu de paramètres switchState
pour Nesting
provoquera l’exécution du contexte pContext
d’exécution et le proxy de thread actuel continue également à s’exécuter sans avoir besoin d’une racine de processeur virtuel. Le proxy de thread est considéré comme ayant quitté le planificateur jusqu’à ce qu’il appelle la méthode IThreadProxy ::SwitchOut à un moment ultérieur dans le temps. La IThreadProxy::SwitchOut
méthode peut bloquer le proxy de thread jusqu’à ce qu’une racine de processeur virtuel soit disponible pour la replanifier.
SwitchTo
doit être appelé sur l’interface IThreadProxy
qui représente le thread en cours d’exécution ou les résultats ne sont pas définis. La fonction lève invalid_argument
si le paramètre pContext
est défini sur NULL
.
IThreadProxy ::YieldToSystem, méthode
Oblige le thread appelant à céder l'exécution à un autre thread prêt à s'exécuter sur le processeur actuel. Le système d’exploitation sélectionne le thread suivant à exécuter.
virtual void YieldToSystem() = 0;
Notes
Lorsqu’un proxy de thread est appelé par un thread Windows standard, YieldToSystem
se comporte exactement comme la fonction SwitchToThread
Windows. Toutefois, lorsqu’elle est appelée à partir de threads schedulable (UMS) en mode utilisateur, la SwitchToThread
fonction délègue la tâche de sélection du thread suivant à exécuter au planificateur en mode utilisateur, et non au système d’exploitation. Pour obtenir l’effet souhaité de basculer vers un autre thread prêt dans le système, utilisez YieldToSystem
.
YieldToSystem
doit être appelé sur l’interface IThreadProxy
qui représente le thread en cours d’exécution ou les résultats ne sont pas définis.
Voir aussi
accès concurrentiel Namespace
IExecutionContext, structure
IScheduler, structure
IVirtualProcessorRoot, structure