SetPriorityClass, fonction (processthreadsapi.h)
Définit la classe de priorité pour le processus spécifié. Cette valeur, associée à la valeur de priorité de chaque thread du processus, détermine le niveau de priorité de base de chaque thread.
Syntaxe
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Paramètres
[in] hProcess
Handle du processus.
Le handle doit avoir le droit d’accès PROCESS_SET_INFORMATION . Pour plus d’informations, consultez Droits d’accès et de sécurité des processus.
[in] dwPriorityClass
Classe de priorité pour le processus. Ce paramètre peut prendre les valeurs suivantes.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Chaque thread a un niveau de priorité de base déterminé par la valeur de priorité du thread et la classe de priorité de son processus. Le système utilise le niveau de priorité de base de tous les threads exécutables pour déterminer quel thread obtient la tranche de temps processeur suivante. La fonction SetThreadPriority permet de définir le niveau de priorité de base d’un thread par rapport à la classe de priorité de son processus. Pour plus d’informations, consultez Planification des priorités.
Les valeurs *_PRIORITY_CLASS affectent la priorité de planification du processeur du processus. Pour les processus qui effectuent des tâches en arrière-plan telles que les E/S de fichiers, les E/S réseau ou le traitement des données, il ne suffit pas d’ajuster la priorité de planification du processeur ; même un processus de priorité de processeur inactif peut facilement interférer avec la réactivité du système lorsqu’il utilise le disque et la mémoire. Les processus qui effectuent un travail en arrière-plan doivent utiliser les valeurs PROCESS_MODE_BACKGROUND_BEGIN et PROCESS_MODE_BACKGROUND_END pour ajuster leurs priorités de planification des ressources ; les processus qui interagissent avec l’utilisateur ne doivent pas utiliser PROCESS_MODE_BACKGROUND_BEGIN.
Si un processus est en mode de traitement en arrière-plan, les nouveaux threads qu’il crée sont également en mode de traitement en arrière-plan. Lorsqu’un thread est en mode de traitement en arrière-plan, il doit réduire le partage des ressources telles que les sections critiques, les tas et les handles avec d’autres threads dans le processus, sinon des inversions de priorité peuvent se produire. Si des threads s’exécutent à priorité élevée, un thread en mode de traitement en arrière-plan peut ne pas être planifié rapidement, mais il ne sera jamais affamé.
Chaque thread peut passer en mode de traitement en arrière-plan indépendamment à l’aide de SetThreadPriority. N’appelez pas SetPriorityClass pour passer en mode de traitement en arrière-plan après qu’un thread du processus a appelé SetThreadPriority pour passer en mode de traitement en arrière-plan. Une fois qu’un processus a terminé le mode de traitement en arrière-plan, il réinitialise tous les threads du processus ; Toutefois, il n’est pas possible pour le processus de savoir quels threads étaient déjà en mode de traitement en arrière-plan.
Exemples
L’exemple suivant illustre l’utilisation du mode d’arrière-plan de processus.
#include <windows.h>
#include <tchar.h>
int main( void )
{
DWORD dwError, dwPriClass;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN))
{
dwError = GetLastError();
if( ERROR_PROCESS_MODE_ALREADY_BACKGROUND == dwError)
_tprintf(TEXT("Already in background mode\n"));
else _tprintf(TEXT("Failed to enter background mode (%d)\n"), dwError);
goto Cleanup;
}
// Display priority class
dwPriClass = GetPriorityClass(GetCurrentProcess());
_tprintf(TEXT("Current priority class is 0x%x\n"), dwPriClass);
//
// Perform background work
//
;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END))
{
_tprintf(TEXT("Failed to end background mode (%d)\n"), GetLastError());
}
Cleanup:
// Clean up
;
return 0;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | processthreadsapi.h (inclure Windows.h sur Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |