プログラムの優先順位を変更する
32BitのWindowsはCPUの割り当てを短いサイクルでスレッドなどに割り当てることで、複数のプログラムが同時に進行しているように見せかけています。プロセスやスレッドには優先順位という項目があって、順位が高いほどCPU時間を優先的に割り当てられます。今回はプログラムの順位を変更する方法を解説します。

プロセスの優先順位を設定するには SetPriorityClass APIを使用します。第一引数にはプロセスのハンドルを渡さなければなりませんが、今回は自分のプロセスを対象とするので GetCurrentProcess APIの戻り値を使用することができます。
スレッドの優先順位を変更するには SetThreadPriority APIを使用します。これも第一引数にスレッドのハンドルを渡さなければなりません。 GetCurrentThread で現在のスレッドのハンドルを取得できるので、この戻り値を直接渡します。 GetCurrentProcess, GetCurrentThread ともに戻り値のハンドルは放っておいて構いません。というか、放っておくようにして下さい。

では、実際に優先順位を最低にしてみましょう。

procedure PriorityIdle;
begin
  //プロセスの優先順位を変更
  SetPriorityClass(GetCurrentProcess, IDLE_PRIORITY_CLASS);
  //スレッドの優先順位を変更
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_IDLE);
end;

これだけです。これでこの関数を実行したプログラムの優先順位が最低になります。プロセスとスレッドの優先順位の組み合わせによって、色々な順位を設定できますので、APIヘルプを参照して色々試してみてください。
通常は優先順位の変更なんてあまり必要の無いことですが、ベンチマークソフトを作る場合、他のプログラムに極力邪魔をされないようにするために、優先順位を最高値に上げる...といった使い方もできます。

Back    Prev    Next