我真的很难理解 SetThreadAffinityMask 函数。我试图用 QueryPerformanceCounter 函数实现一个计时器,但我不明白如何正确获得线程关联。 msdn 上的一个人发布了以下代码示例:
void HRTimer::StartTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&start);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
}
但是当我采用此代码片段时,SetThreadAffinityMask 返回的 oldmask 值为零。在 MSDN 上,我看到返回值为零意味着发生了错误。我调用了 GetLastError() 并得到了 ERROR_INVALID_PARAMETER 的错误代码。现在我想知道上面的代码片段是否不正确。有人可以解释一下如何正确使用 SetThreadAffinityMask 以便仅在系统的第一个 CPU 上调用 QueryPerformanceCounter 吗?或者上面的例子是否正确,尽管 SetThreadAffinityMask 返回零?
先感谢您。
最佳答案
掩码是一个位域:每一位指定一个处理器。 0 表示“无处理器”。这不是逻辑。
SetThreadAffinityMask 的 MSDN
关于c++ - SetThreadAffinityMask 用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12943124/