Classe de priorité

 

 

La classe de priorité sur un processus permet de déterminer la classe qui sera utilisée par les threads de ce processus. Il sera ensuite possible de positionner le niveau de priorité dans la classe sur chaques threads

Il y a 6 classes de prioritées:

IDLE_PRIORITY_CLASS C'est la priorité la plus basse, le thread ne tourne que s'il n'y a plus rien d'autre à faire par le cpu. Cela peut-être intéressant pour des traitements en tâche de fond.

BELOW_NORMAL_PRIORITY_CLASS Priorité supérieure à IDLE_PRIORITY_CLASS mais inférieure à NORMAL_PRIORITY_CLASS. (N'existe pas pour NT, Windows 95, 98 et ME).

NORMAL_PRIORITY_CLASS Priorité normal d'un thread, n'a pas d'urgence particulière. C'est donc cette priorité qu'il faut généralement utiliser.

ABOVE_NORMAL_PRIORITY_CLASS Priorité supérieure à NORMAL_PRIORITY_CLASS mais inférieure à HIGH_PRIORITY_CLASS. (N'existe pas pour NT, Windows 95, 98 et ME).

HIGH_PRIORITY_CLASS A utiliser avec précaution. Ce thread sera prioritaire pour recevoir le contrôle du microprocesseur. A utiliser sur des traitements plutôt courts ou une application en premier plan.

REALTIME_PRIORITY_CLASS Priorité maximum, il faut alors que le traitement soit le plus rapide possible si vous ne voulez pas avoir une machine qui saccade. Les quotas de temps alloués à ce thread sont infinis. Ce qui veut dire qu'il utilise à 100% le temps du microprocesseur et ne le partage plus. Tous les autres threads sont eux en attentes. C'est au thread en cours d'exécution de rendre la main. Généralement, vous n'utiliserez pas ce genre de priorité. Sauf peut-être pour gérer certains périphériques dans le cas de développement de driver. Ou encore pour créer un programme permettant le ralentissement de la machine (par exemple pour ralentir un jeu).

Pour changer la classe de priorité d'un thread, vous utiliserez la fonction

BOOL SetPriorityClass(
HANDLE hProcess,
DWORD dwPriorityClass
);

Pour relire la classe de priorité:

DWORD GetPriorityClass(
HANDLE hProcess
);

Ces deux fonctions retournant 0 si erreur.