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 的系统上,关联掩码必须在线程的当前 处理器组中指定处理器。
返回值
如果函数成功,则返回值为线程的上一个关联掩码。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 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 |