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

线程