Win32API プロセスの優先度クラスを設定・取得する SetPriorityClass, GetPriorityClass
プロセスの優先度クラスを設定・取得する
プロセスの優先度クラスとは、プロセスのCPU割り当てのされやすさのようなもの。プロセスにCPUを割り当てるのはスケジューラが行う。
使用するAPI
プロセスの優先度クラスには以下のようなものがある
IDLE_PRIORITY_CLASS | アイドル |
BELOW_NORMAL_PRIORITY_CLASS | 通常以下 |
NORMAL_PRIORITY_CLASS | 通常 |
ABOVE_NORMAL_PRIORITY_CLASS | 通常以上 |
HIGH_PRIORITY_CLASS | 高 |
REALTIME_PRIORITY_CLASS | リアルタイム |
#include <windows.h> int main() { HANDLE hProcess; hProcess = GetCurrentProcess(); if (SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS)) { puts("SetPriorityClass: Success"); } else { puts("SetPriorityClass: Error"); } switch (GetPriorityClass(hProcess)) { case IDLE_PRIORITY_CLASS: puts("IDLE_PRIORITY_CLASS"); break; case BELOW_NORMAL_PRIORITY_CLASS: puts("BELOW_NORMAL_PRIORITY_CLASS"); break; case NORMAL_PRIORITY_CLASS: puts("NORMAL_PRIORITY_CLASS"); break; case ABOVE_NORMAL_PRIORITY_CLASS: puts("ABOVE_NORMAL_PRIORITY_CLASS"); break; case HIGH_PRIORITY_CLASS: puts("HIGH_PRIORITY_CLASS"); break; case REALTIME_PRIORITY_CLASS: puts("REALTIME_PRIORITY_CLASS"); break; } return 0; }
補足: このコードでは、自身のプロセス優先度クラスを「リアルタイム」に設定しているが、このコードをWindows Vistaで実行したところ、「高」に設定されてしまった。Windows Vistaではプロセス優先度クラスを「リアルタイム」に設定できないようだ。