3

是否有 Windows API 或任何方法来确定我当前线程在哪个物理处理器/内核上运行?我不需要那些信息。我只是好奇。

我对允许线程运行的处理器不感兴趣。我想知道它目前在哪一个上运行。我知道线程从一个线程切换到另一个线程非常快......

4

3 回答 3

4

线程通常会从一个处理器切换到另一个处理器,所以这有点没有意义,但你可以使用GetCurrentProcessorNumber.

正如其他人所说,您可以使用GetProcessAffinityMaskor GetThreadIdealProcessor,但只有当您已经为线程设置了关联掩码或理想处理器时,这些才会起作用。

于 2009-08-27T14:25:25.293 回答
3

您可以使用GetProcessAffinityMask查询处理器亲和性。如果您没有设置处理器关联,我不确定结果会有多大用处,因为线程可以在处理器之间切换。

于 2009-08-27T14:18:57.597 回答
2

要使用 Windows API 控制您的进程或线程在哪个处理器上运行,您可以使用SetThreadAffinityMaskSetProcessAffinityMask

这些通过在位掩码中设置位来工作,其中每个位代表您的线程或进程可以调度的处理器:

BOOL WINAPI SetProcessAffinityMask(
  __in  HANDLE hProcess,
  __in  DWORD_PTR dwProcessAffinityMask
);

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

于 2009-08-27T14:17:06.803 回答