我真的很难理解SetThreadAffinityMask函数。我正在尝试使用QueryPerformanceCounter函数实现一个计时器,但是我不知道如何正确地获得线程亲和性。msdn上的一个家伙发布了以下代码示例:
void HRTimer::StartTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&start);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
}但是,当我采用此代码片段时,SetThreadAffinityMask返回的旧掩码的值为零。在MSDN上,我看到返回值为零意味着发生了错误。我调用了GetLastError()并得到了ERROR_INVALID_PARAMETER的错误代码。现在我想知道上面的代码片段是不是不正确。有没有人能给我解释一下如何正确使用SetThreadAffinityMask,使QueryPerformanceCounter只在系统的第一个CPU上调用?或者上面的例子是正确的,尽管SetThreadAffinityMask返回0?
提前谢谢你。
发布于 2012-10-18 04:52:47
掩码是一个位字段:每个位指定一个处理器。0表示“无处理器”。这不是逻辑。
2
适用于SetThreadAffinityMask的MSDN
https://stackoverflow.com/questions/12943124
复制相似问题