确定我的代码当前在哪个物理处理器上运行

3

有没有Windows API或者其他方法可以确定当前线程运行在哪个物理处理器/核心上?我不需要这个信息,只是好奇。

我不关心线程允许运行的处理器,我想知道它当前确切地运行在哪个处理器上。我知道线程在不同处理器之间快速切换...

3个回答

4
线程通常会在处理器之间切换,因此这有点没有意义,但您可以使用GetCurrentProcessorNumber。正如其他人所说,您可以使用GetProcessAffinityMaskGetThreadIdealProcessor,但这些只在您已经为线程设置了亲和性掩码或理想处理器时才起作用。

1
没想到这是可能的,但事实证明确实如此 - 我修改了我的答案以反映这一点。 - Eric Petroelje
不错,我没意识到那是可能的。 - Simon Steele
我可以用那些信息做一些很酷但没什么用的东西,比如统计数据或某种可视化;)谢谢 - Nick

3
您可以使用GetProcessAffinityMask查询处理器亲和性。如果您尚未设置处理器亲和性,则我不确定结果会有多大用处,因为线程可能会在处理器之间快速切换。

2
使用Windows API控制进程或线程运行在哪个处理器上,您可以使用SetThreadAffinityMaskSetProcessAffinityMask函数。这些函数通过设置位掩码中的位来工作,其中每个位表示线程或进程可以被调度到的处理器。
BOOL WINAPI SetProcessAffinityMask(
  __in  HANDLE hProcess,
  __in  DWORD_PTR dwProcessAffinityMask
);

调用GetProcessAffinityMask以发现哪些处理器可用于这些调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接