Partager via


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 SwitchToThreadWindows. 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