SetThreadAffinityMask

指定したスレッドのプロセッサアフィニティマスクを設定する。

SetThreadAffinityMask hThread, dwThreadAffinityMask

hThread : [intptr] アフィニティマスクを設定するスレッドのハンドル。THREAD_SET_INFORMATION または THREAD_SET_LIMITED_INFORMATION アクセス権、および THREAD_QUERY_INFORMATION または THREAD_QUERY_LIMITED_INFORMATION アクセス権が必要。詳細は Thread Security and Access Rights を参照。Windows Server 2003 と Windows XP では THREAD_SET_INFORMATION と THREAD_QUERY_INFORMATION の両方が必要。
dwThreadAffinityMask : [int] スレッドのアフィニティマスク。プロセッサ数が 64 を超えるシステムでは、アフィニティマスクはスレッドの現在のプロセッサグループ内のプロセッサを指定しなければならない。

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

解説

指定したスレッドのプロセッサアフィニティマスクを設定する。

[戻り値]
関数が成功した場合、戻り値はスレッドの直前のアフィニティマスクである。関数が失敗した場合、戻り値は 0
となる。拡張エラー情報を取得するには GetLastError
を呼ぶ。スレッドアフィニティマスクがプロセスアフィニティマスクで選択されていないプロセッサを要求した場合、ラストエラーコードは
ERROR_INVALID_PARAMETER となる。

[備考]

スレッドアフィニティマスクは、スレッドの実行が許可されている論理プロセッサを各ビットで表すビットベクトルである。スレッドアフィニティマスクは、そのスレッドを含むプロセスのプロセスアフィニティマスクのサブセットでなければならない。スレッドはプロセスが実行可能なプロセッサ上でのみ実行できる。したがって、プロセスアフィニティマスクで
0 になっているプロセッサに対して、スレッドアフィニティマスクで 1
を指定することはできない。プロセスやスレッドにアフィニティマスクを設定すると、システムが特定のプロセッサ上でのスレッド実行を制限するため、スレッドが受け取る
CPU
時間が減ることがある。多くの場合は、システムに利用可能なプロセッサを選ばせる方がよい。新しいスレッドアフィニティマスクが現在実行中のプロセッサを含まない場合、スレッドは許可されているプロセッサのいずれかへ再スケジュールされる。Windows
11 と Windows Server 2022 以降、64
を超えるプロセッサを持つシステムでは、プロセスとスレッドのアフィニティは既定で全プロセッサグループにまたがる。dwThreadAffinityMask
はスレッドの現在のプライマリグループ内のプロセッサを指定する必要がある。

情報

プラグイン / モジュール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