SetThreadAffinityMask 関数 (winbase.h)
指定したスレッドのプロセッサ アフィニティ マスクを設定します。
構文
DWORD_PTR SetThreadAffinityMask(
[in] HANDLE hThread,
[in] DWORD_PTR dwThreadAffinityMask
);
パラメーター
[in] hThread
アフィニティ マスクを設定するスレッドへのハンドル。
このハンドルには、 THREAD_SET_INFORMATION または THREAD_SET_LIMITED_INFORMATION アクセス権と、 THREAD_QUERY_INFORMATIONまたはTHREAD_QUERY_LIMITED_INFORMATION アクセス権 が 必要です。 詳細については、「 スレッド セキュリティとアクセス権」を参照してください。
Windows Server 2003 および Windows XP: ハンドルには、THREAD_SET_INFORMATIONと THREAD_QUERY_INFORMATION アクセス権 が 必要です。
[in] dwThreadAffinityMask
スレッドのアフィニティ マスク。
64 を超えるプロセッサを持つシステムでは、アフィニティ マスクはスレッドの現在の プロセッサ グループ内のプロセッサを指定する必要があります。
戻り値
関数が成功した場合、戻り値はスレッドの以前のアフィニティ マスクです。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
スレッド・アフィニティ・マスクが、プロセス・アフィニティ・マスクに対して選択されていないプロセッサーを要求した場合、最後のエラー・コードは ERROR_INVALID_PARAMETER。
注釈
スレッド アフィニティ マスクは、各ビットがスレッドの実行が許可されている論理プロセッサを表すビット ベクターです。 スレッド アフィニティ マスクは、スレッドの包含プロセスのプロセス アフィニティ マスクのサブセットである必要があります。 スレッドは、そのプロセスを実行できるプロセッサでのみ実行できます。 したがって、プロセス アフィニティ マスクでプロセッサに 0 ビットが指定されている場合、スレッド アフィニティ マスクはプロセッサに 1 ビットを指定できません。
プロセスまたはスレッドのアフィニティ マスクを設定すると、システムが特定のプロセッサでスレッドを実行することが制限されるため、スレッドの受信プロセッサ時間が短縮される可能性があります。 ほとんどの場合、システムで使用可能なプロセッサを選択することをお勧めします。
新しいスレッド アフィニティ マスクで、現在スレッドを実行しているプロセッサが指定されていない場合、スレッドは許容されるプロセッサのいずれかで再スケジュールされます。
Windows 11 および Windows Server 2022 以降では、プロセッサ数が 64 を超えるシステムでは、プロセスとスレッドのアフィニティは、既定ですべてのプロセッサ グループにわたって、システム内のすべてのプロセッサにまたがっています。 dwThreadAffinityMask は、スレッドの現在のプライマリ グループ内のプロセッサを指定する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |