SetThreadPriority

指定したスレッドの優先度値を設定する。この値とスレッドのプロセスの優先度クラスを合わせて、スレッドの基底優先度が決定される。

SetThreadPriority hThread, nPriority

hThread : [intptr] 優先度値を設定するスレッドのハンドル。THREAD_SET_INFORMATION または THREAD_SET_LIMITED_INFORMATION アクセス権が必要。詳細は Thread Security and Access Rights を参照。Windows Server 2003 では THREAD_SET_INFORMATION アクセス権が必要。
nPriority : [int] 

(プラグイン / モジュール : kernel32.dll)

解説

指定したスレッドの優先度値を設定する。この値とスレッドのプロセスの優先度クラスを合わせて、スレッドの基底優先度が決定される。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼ぶ。Windows Phone 8.1: Windows Phone
ストアアプリは本関数を呼び出せるが効果はない。関数は成功を示す 0 以外を返す。

[備考]

すべてのスレッドはスレッドの優先度値とプロセスの優先度クラスにより決定される基底優先度を持つ。システムは実行可能スレッドの基底優先度から次に
CPU
時間を割り当てるスレッドを決定する。スレッドは各優先度レベルでラウンドロビン方式でスケジュールされ、上位レベルに実行可能スレッドがない場合のみ下位レベルがスケジュールされる。SetThreadPriority
はスレッドの基底優先度をプロセスの優先度クラスに対する相対値で設定できる。たとえば IDLE_PRIORITY_CLASS
のプロセスに属するスレッドに THREAD_PRIORITY_HIGHEST を指定すると基底優先度は 6
になる。優先度クラスとスレッド優先度値の組み合わせごとの基底優先度は Scheduling Priorities
の表を参照。IDLE_PRIORITY_CLASS、BELOW_NORMAL_PRIORITY_CLASS、NORMAL_PRIORITY_CLASS、ABOVE_NORMAL_PRIORITY_CLASS、HIGH_PRIORITY_CLASS
のプロセスでは、スレッドにとって重要なイベントが発生したときシステムは動的に基底優先度を引き上げる。REALTIME_PRIORITY_CLASS
プロセスは動的引き上げを受けない。すべてのスレッドは初期状態で THREAD_PRIORITY_NORMAL
である。プロセスの優先度クラスは GetPriorityClass / SetPriorityClass
で取得・設定する。スレッドの優先度値は GetThreadPriority
で取得する。優先度クラスは時間制約のあるアプリケーションと通常のアプリケーションを区別するために使い、スレッド優先度値はプロセス内のタスクの相対優先度を区別するために使う。たとえばウィンドウ入力を処理するスレッドは
CPU 集約的計算を行うスレッドより高い優先度にできる。優先度を扱う際は、高優先度スレッドが利用可能 CPU
時間を独占しないよう注意する。基底優先度 11 を超えるスレッドは OS
の通常動作を妨げる。REALTIME_PRIORITY_CLASS
の使用はディスクキャッシュのフラッシュ停止やマウス無応答などを引き起こす可能性がある。THREAD_PRIORITY_* 値はスレッドの
CPU スケジューリング優先度に影響する。ファイル I/O・ネットワーク I/O・データ処理などのバックグラウンド作業を行うスレッドでは
CPU スケジューリング優先度の調整だけでは不十分で、アイドル CPU
優先度のスレッドでもディスクとメモリを使用するときシステムの応答性を妨げる可能性がある。バックグラウンドスレッドは
THREAD_MODE_BACKGROUND_BEGIN と THREAD_MODE_BACKGROUND_END
を使うべきで、ユーザーと対話するスレッドは使うべきではない。バックグラウンド処理モード中のスレッドは、クリティカルセクション・ヒープ・ハンドルなどの共有を最小化するべきで、さもなければ優先度逆転が発生する。高優先度スレッドが実行されているとバックグラウンド処理モードのスレッドはすぐにはスケジュールされないが、決して飢餓状態にはならない。Windows
Server 2008 と Windows Vista: システム起動中、SetThreadPriority
はシステムスタートアップフォルダから起動されたアプリや Run
レジストリキーに記載されたアプリに対しては成功を返すが優先度を変更しない。これらのアプリは起動時のシステム応答性を高めるため約 60
秒間低い優先度で動作する。Windows 8.1 と Windows Server 2012 R2: 本関数は Windows
ストアアプリでサポートされる。Windows Phone 8.1: Windows Phone
ストアアプリは本関数を呼び出せるが効果はない。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs