setThreadAffinityMask 函数 (winbase.h)

设置指定线程的处理器相关性掩码。

语法

DWORD_PTR SetThreadAffinityMask(
  [in] HANDLE    hThread,
  [in] DWORD_PTR dwThreadAffinityMask
);

参数

[in] hThread

要设置关联掩码的线程的句柄。

此句柄必须具有 THREAD_SET_INFORMATIONTHREAD_SET_LIMITED_INFORMATION 访问权限和 THREAD_QUERY_INFORMATIONTHREAD_QUERY_LIMITED_INFORMATION 访问权限。 有关详细信息,请参阅 线程安全和访问权限

Windows Server 2003 和 Windows XP: 句柄必须具有 THREAD_SET_INFORMATIONTHREAD_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

另请参阅

GetProcessAffinityMask

多个处理器

OpenThread

进程和线程函数

处理器组

SetProcessAffinityMask

SetThreadIdealProcessor

线程