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 |