Scheduler, classe
Représente une abstraction pour un planificateur de runtime d'accès concurrentiel.
Syntaxe
class Scheduler;
Membres
Constructeurs protégés
Nom | Description |
---|---|
Scheduler | Un objet de la classe peut uniquement être créé à l’aide Scheduler de méthodes de fabrique, ou implicitement. |
~Destructeur du planificateur | Un objet de la Scheduler classe est implicitement détruit lorsque toutes les références externes à celle-ci cessent d’exister. |
Méthodes publiques
Nom | Description |
---|---|
Attacher | Attache le planificateur au contexte appelant. Une fois cette méthode retournée, le contexte appelant est géré par le planificateur et le planificateur devient le planificateur actuel. |
Créer | Crée un planificateur dont le comportement est décrit par le _Policy paramètre, place une référence initiale sur le planificateur et retourne un pointeur vers celui-ci. |
CreateScheduleGroup | Surcharge. Crée un groupe de planification dans le planificateur. La version qui accepte le paramètre _Placement entraîne l’exécution de tâches dans le groupe de planification nouvellement créé vers l’exécution à l’emplacement spécifié par ce paramètre. |
GetNumberOfVirtualProcessors | Retourne le nombre actuel de processeurs virtuels pour le planificateur. |
GetPolicy | Retourne une copie de la stratégie avec laquelle le planificateur a été créé. |
Id | Retourne un identificateur unique pour le planificateur. |
IsAvailableLocation | Détermine si un emplacement donné est disponible sur le planificateur. |
Référence | Incrémente le nombre de références du planificateur. |
RegisterShutdownEvent | Provoque le signal du handle d’événement Windows transmis dans le _Event paramètre lorsque le planificateur s’arrête et se détruit lui-même. Au moment où l’événement est signalé, tout le travail planifié pour le planificateur est terminé. Plusieurs événements d’arrêt peuvent être inscrits via cette méthode. |
Version release | Décrémente le nombre de références du planificateur. |
ResetDefaultSchedulerPolicy | Réinitialise la stratégie de planificateur par défaut au runtime. La prochaine fois qu’un planificateur par défaut est créé, il utilise les paramètres de stratégie par défaut du runtime. |
ScheduleTask | Surcharge. Planifie une tâche légère dans le planificateur. La tâche légère sera placée dans un groupe de planification déterminé par le runtime. La version qui prend le paramètre _Placement entraîne le biais de la tâche vers l’exécution à l’emplacement spécifié. |
SetDefaultSchedulerPolicy | Permet à une stratégie définie par l’utilisateur d’être utilisée pour créer le planificateur par défaut. Cette méthode peut être appelée uniquement quand aucun planificateur par défaut n’existe dans le processus. Une fois qu’une stratégie par défaut a été définie, elle reste en vigueur jusqu’à ce que l’appel valide suivant soit à la SetDefaultSchedulerPolicy méthode ResetDefaultSchedulerPolicy . |
Notes
Le planificateur d’exécution concurrentiel utilise des contextes d’exécution, qui correspondent aux contextes d’exécution du système d’exploitation, tels qu’un thread, pour exécuter le travail mis en file d’attente par votre application. À tout moment, le niveau d’accès concurrentiel d’un planificateur est égal au nombre de processeurs virtuels qui lui sont accordés par Resource Manager. Un processeur virtuel est une abstraction pour une ressource de traitement et mappe à un thread matériel sur le système sous-jacent. Un seul contexte de planificateur peut s’exécuter sur un processeur virtuel à un moment donné.
Le runtime d’accès concurrentiel crée un planificateur par défaut par processus pour exécuter le travail parallèle. En outre, vous pouvez créer vos propres instances de planificateur et les manipuler à l’aide de cette classe.
Hiérarchie d'héritage
Scheduler
Spécifications
En-tête : concrt.h
Espace de noms : concurrency
Attacher
Attache le planificateur au contexte appelant. Une fois cette méthode retournée, le contexte appelant est géré par le planificateur et le planificateur devient le planificateur actuel.
virtual void Attach() = 0;
Notes
L’attachement d’un planificateur place implicitement une référence sur le planificateur.
À un moment donné, vous devez appeler la méthode CurrentScheduler ::D etach pour permettre à l’planificateur de s’arrêter.
Si cette méthode est appelée à partir d’un contexte déjà attaché à un autre planificateur, le planificateur existant est mémorisé comme le planificateur précédent, et le planificateur nouvellement créé devient le planificateur actuel. Lorsque vous appelez la CurrentScheduler::Detach
méthode à un moment ultérieur, le planificateur précédent est restauré en tant que planificateur actuel.
Cette méthode lève une exception improper_scheduler_attach si ce planificateur est le planificateur actuel du contexte appelant.
Créer
Crée un planificateur dont le comportement est décrit par le _Policy
paramètre, place une référence initiale sur le planificateur et retourne un pointeur vers celui-ci.
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
Paramètres
_Politique
Stratégie de planificateur qui décrit le comportement du planificateur nouvellement créé.
Valeur de retour
Pointeur vers un planificateur nouvellement créé. Cet Scheduler
objet a un nombre de références initial placé sur celui-ci.
Notes
Une fois qu’un planificateur a été créé avec la Create
méthode, vous devez appeler la Release
méthode à un moment donné dans le futur pour supprimer le nombre de références initial et autoriser l’arrêt du planificateur.
Un planificateur créé avec cette méthode n’est pas attaché au contexte appelant. Elle peut être attachée à un contexte à l’aide de la méthode Attach .
Cette méthode peut lever diverses exceptions, notamment scheduler_resource_allocation_error et invalid_scheduler_policy_value.
CreateScheduleGroup
Crée un groupe de planification dans le planificateur. La version qui accepte le paramètre _Placement
entraîne l’exécution de tâches dans le groupe de planification nouvellement créé vers l’exécution à l’emplacement spécifié par ce paramètre.
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
Paramètres
_Placement
Référence à un emplacement où les tâches au sein du groupe de planification sont biaisées pour s’exécuter.
Valeur de retour
Pointeur vers le groupe de planification nouvellement créé. Cet ScheduleGroup
objet a un nombre de références initial placé sur celui-ci.
Notes
Vous devez appeler la méthode Release sur un groupe de planification lorsque vous avez terminé le travail de planification. Le planificateur détruit le groupe de planifications lorsque tous les travaux mis en file d’attente sont terminés.
Notez que si vous avez créé explicitement ce planificateur, vous devez libérer toutes les références à des groupes de planifications, avant de publier vos références sur le planificateur.
GetNumberOfVirtualProcessors
Retourne le nombre actuel de processeurs virtuels pour le planificateur.
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
Valeur de retour
Nombre actuel de processeurs virtuels pour le planificateur.
GetPolicy
Retourne une copie de la stratégie avec laquelle le planificateur a été créé.
virtual SchedulerPolicy GetPolicy() const = 0;
Valeur de retour
Copie de la stratégie avec laquelle le planificateur a été créé.
Id
Retourne un identificateur unique pour le planificateur.
virtual unsigned int Id() const = 0;
Valeur de retour
Identificateur unique du planificateur.
IsAvailableLocation
Détermine si un emplacement donné est disponible sur le planificateur.
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
Paramètres
_Placement
Référence à l’emplacement pour interroger le planificateur.
Valeur de retour
Indique si l’emplacement spécifié par l’argument _Placement
est disponible ou non sur le planificateur.
Notes
Notez que la valeur de retour est un échantillonnage instantané de la disponibilité de l’emplacement donné. En présence de plusieurs planificateurs, la gestion dynamique des ressources peut ajouter ou retirer des ressources des planificateurs à tout moment. Si cela se produit, l’emplacement donné peut modifier la disponibilité.
Référence
Incrémente le nombre de références du planificateur.
virtual unsigned int Reference() = 0 ;
Valeur de retour
Nombre de références nouvellement incrémenté.
Notes
Il est généralement utilisé pour gérer la durée de vie du planificateur pour la composition. Lorsque le nombre de références d’un planificateur tombe à zéro, le planificateur s’arrête et se déstructule une fois que tous les travaux sur le planificateur sont terminés.
La méthode lève une exception improper_scheduler_reference si le nombre de références avant d’appeler la Reference
méthode a été égal à zéro et que l’appel est effectué à partir d’un contexte qui n’appartient pas au planificateur.
RegisterShutdownEvent
Provoque le signal du handle d’événement Windows transmis dans le _Event
paramètre lorsque le planificateur s’arrête et se détruit lui-même. Au moment où l’événement est signalé, tout le travail planifié pour le planificateur est terminé. Plusieurs événements d’arrêt peuvent être inscrits via cette méthode.
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
Paramètres
_Événement
Handle vers un objet d’événement Windows qui sera signalé par le runtime lorsque le planificateur s’arrête et se détruit.
Version release
Décrémente le nombre de références du planificateur.
virtual unsigned int Release() = 0;
Valeur de retour
Nombre de références nouvellement décrémentés.
Notes
Il est généralement utilisé pour gérer la durée de vie du planificateur pour la composition. Lorsque le nombre de références d’un planificateur tombe à zéro, le planificateur s’arrête et se déstructule une fois que tous les travaux sur le planificateur sont terminés.
ResetDefaultSchedulerPolicy
Réinitialise la stratégie de planificateur par défaut au runtime. La prochaine fois qu’un planificateur par défaut est créé, il utilise les paramètres de stratégie par défaut du runtime.
static void __cdecl ResetDefaultSchedulerPolicy();
Notes
Cette méthode peut être appelée alors qu’un planificateur par défaut existe dans le processus. Elle n’affecte pas la stratégie du planificateur par défaut existant. Toutefois, si le planificateur par défaut devait s’arrêter et qu’une nouvelle valeur par défaut devait être créée ultérieurement, le nouveau planificateur utiliserait les paramètres de stratégie par défaut du runtime.
Scheduler
Un objet de la classe peut uniquement être créé à l’aide Scheduler
de méthodes de fabrique, ou implicitement.
Scheduler();
Notes
Le planificateur par défaut du processus est créé implicitement lorsque vous utilisez de nombreuses fonctions d’exécution qui nécessitent qu’un planificateur soit attaché au contexte appelant. Les méthodes de la CurrentScheduler
classe et des fonctionnalités des couches PPL et agents effectuent généralement une pièce jointe implicite.
Vous pouvez également créer un planificateur explicitement par le biais de la CurrentScheduler::Create
méthode ou de la Scheduler::Create
méthode.
~Programmateur
Un objet de la Scheduler
classe est implicitement détruit lorsque toutes les références externes à celle-ci cessent d’exister.
virtual ~Scheduler();
ScheduleTask
Planifie une tâche légère dans le planificateur. La tâche légère sera placée dans un groupe de planification déterminé par le runtime. La version qui prend le paramètre _Placement
entraîne le biais de la tâche vers l’exécution à l’emplacement spécifié.
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
Paramètres
_Proc
Pointeur vers la fonction à exécuter pour effectuer le corps de la tâche légère.
_Données
Pointeur void vers les données qui seront transmises en tant que paramètre au corps de la tâche.
_Placement
Référence à un emplacement où la tâche légère sera biaisée pour s’exécuter.
SetDefaultSchedulerPolicy
Permet à une stratégie définie par l’utilisateur d’être utilisée pour créer le planificateur par défaut. Cette méthode peut être appelée uniquement quand aucun planificateur par défaut n’existe dans le processus. Une fois qu’une stratégie par défaut a été définie, elle reste en vigueur jusqu’à ce que l’appel valide suivant soit à la SetDefaultSchedulerPolicy
méthode ResetDefaultSchedulerPolicy .
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
Paramètres
_Politique
Stratégie à définir comme stratégie de planificateur par défaut.
Notes
Si la SetDefaultSchedulerPolicy
méthode est appelée lorsqu’un planificateur par défaut existe déjà dans le processus, le runtime lève une exception default_scheduler_exists .
Voir aussi
accès concurrentiel Namespace
Scheduler, classe
PolicyElementKey
Planificateur de tâches