我真的很难理解SetThreadAffinityMask函数.我试图用QueryPerformanceCounter函数实现一个计时器,但我不明白如何正确获得线程关联.msdn上的一个人发布了以下代码示例:
void HRTimer::StartTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&start);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
}
Run Code Online (Sandbox Code Playgroud)
但是当我采用这个代码片段时,SetThreadAffinityMask返回的oldmask的值为零.在MSDN上,我看到返回值为零意味着发生了错误.我调用了GetLastError()并获得了ERROR_INVALID_PARAMETER的错误代码.现在我想知道上面的代码片段是否正确.有人可以解释一下如何正确使用SetThreadAffinityMask,以便例如只在系统上的第一个CPU上调用QueryPerformanceCounter吗?或者上面的例子是否正确,尽管SetThreadAffinityMask返回零?
先感谢您.
掩码是位域:每个位指定一个处理器.0表示"无处理器".这不是逻辑.
| 归档时间: |
|
| 查看次数: |
4944 次 |
| 最近记录: |