2009-08-27 37 views
1

是否有Windows API或任何方式來確定我當前的線程在哪個物理處理器/內核上運行?我不需要這些信息。我只是好奇。確定我的代碼當前在哪個物理處理器上運行

我對允許線程運行的處理器不感興趣。我想知道它目前正在運行哪一個。我知道線程從一個切換到另一個很快......

回答

3

線程往往會從處理器到處理器切換,所以它是一種毫無意義的,但您可以使用GetCurrentProcessorNumber

正如其他人所說,你可以使用GetProcessAffinityMask或GetThreadIdealProcessor,但如果你已經那些只會工作爲該線程設置親和性掩碼或理想處理器。

+1

沒想到這是可能的,但事實證明它是 - 編輯我的答案,以反映這一點。 –

+0

不錯,沒有意識到這是可能的。 –

+0

我可以做一些很酷的無用的東西,如統計信息或某種可視化信息;)謝謝 – Nick

1

要使用Windows API控制您的進程或線程在哪個處理器上運行,您可以使用SetThreadAffinityMaskSetProcessAffinityMask

這些工作由一個位掩碼,其中每一位代表一個處理器的線程或進程設置位可定爲:

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

呼叫GetProcessAffinityMask發現哪些處理器可用於在這些電話中使用。

2

您可以使用GetProcessAffinityMask來查詢處理器關聯性。如果你還沒有設置處理器親和力,我不確定結果會有多大用處,因爲線程可以在處理器之間運行。

相關問題