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