之前就在博客上提及过这个函数,但如今发现,自己对它的使用存在问题。
1.先确定这个函数是怎么回事,来自: SetThreadAffinityMask function (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访问权限。
[in] dwThreadAffinityMask
线程的关联掩码
返回值:
如果函数成功,则返回值为线程的上一个关联掩码。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。
如果线程关联掩码请求的处理器未被进程关联掩码选中,则最后一个错误代码为ERROR_INVALID_PARAMETER。
备注:
线程关联掩码是一个位向量,其中每个位代表允许线程在其上运行的逻辑处理器。线程关联掩码必须是线程所在进程的进程关联掩码的子集。线程只能在其进程可以运行的处理器上运行。因此,当进程关联掩码为某个处理器指定 0 位时,线程关联掩码不能为该处理器指定 1 位。
也就是说先要获得进程的关联掩码,那么该如何获得线程的关联掩码呢?