首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetThreadAffinityMask使用率

SetThreadAffinityMask使用率
EN

Stack Overflow用户
提问于 2012-10-18 04:48:13
回答 1查看 5.3K关注 0票数 3

我真的很难理解SetThreadAffinityMask函数。我正在尝试使用QueryPerformanceCounter函数实现一个计时器,但是我不知道如何正确地获得线程亲和性。msdn上的一个家伙发布了以下代码示例:

代码语言:javascript
复制
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?

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-18 04:52:47

掩码是一个位字段:每个位指定一个处理器。0表示“无处理器”。这不是逻辑。

  • 0x0001 : proc 1
  • 0x0003 : proc 1

2

  • 0x000F: proc 1,2,3,proc

适用于SetThreadAffinityMask的MSDN

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12943124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档