プロセス優先度クラスとスレッド優先度は、スレッドの構築base priority
です。優先順位がどのように組み立てられるかについては、優先順位のスケジューリングを参照してください。このリストを見ると、あなたの理解がある程度正しいことが明らかになります。特定のプライオリティ クラス内で、base priority
は によって決定されるさまざまな値を持つことができますthread priority
。
のPROCESS_MODE_BACKGROUND_BEGIN
値SetPriorityClass
と のTHREAD_MODE_BACKGROUND_END
値はSetThreadPriority
、すべての Windows バージョンでサポートされているわけではありません。
PROCESS_MODE_BACKGROUND_BEGIN:
システムは、プロセス (およびそのスレッド) のリソース スケジューリング優先度を下げて、フォアグラウンドでのアクティビティに大きな影響を与えずにバックグラウンド作業を実行できるようにします。
THREAD_MODE_BACKGROUND_END:
バックグラウンド処理モードを終了します。システムは、スレッドがバックグラウンド処理モードに入る前のスレッドのリソース スケジューリング優先度を復元します。
ここで問題となっているシナリオの結果は予測可能です。SetPriorityClass
は、すべてのスレッドを含むプロセスを に設定しますbackground processing mode
。以下SetThreadPriority
は、 からのスレッドのみを解放しますbackground processing mode
。ただし、プロセスの他のすべての可能なスレッドは、バックグラウンド処理モードのままになります。
注:との組み合わせのみがprocess priority class
を thread priority
決定しbase priority
ます。したがって、 への呼び出しも への呼び出しも基本優先度を返しGetThreadPriority
ません。GetPriorityClass
それらの組み合わせのみが、上記の「スケジューリング優先度」リンクで説明されている基本優先度を解放します。残念ながら、新しいbackground processing mode
値はまだbase priority
リストに含まれていません。しかし、名前base priority
はここで重要なことを示しています。基本優先度 (プロセス優先度クラスとスレッド優先度から派生) に基づいて、スケジューラーはスケジューリング優先度を動的に適応させることができます。fine tune
バックグラウンド モードは、スケジューリングの優先度を高める方法の 1 つです。もう 1 つの方法は、プライオリティ ブーストです。プライオリティ ブースト機能はしばらくの間存在します。への新しいアクセスbackground processing mode
の値を指定SetThreadPriority
してSetPriorityClass
、優先ブースト機能を直接開きます。Windows XP では、SetProcessPriorityBoostを呼び出してこれを行う必要がありました。