2013-09-25 146 views
0

我想一個測試程序,只在CPU1運行,所以我寫這樣的SetThreadAffinityMask沒有效果

#include <iostream> 
#include <windows.h> 

    int main(){ 
     ::SetThreadAffinityMask(::GetCurrentProcess(),1); 
     while(1) 
      ; 
     return 0; 
    } 

,但是當我打開任務管理器,我發現CPU1代碼沒有完全使用,百分比它的使用情況總是在變化。爲什麼?CPU1應該100%使用? 對不起,我的英語。

回答

1

SetThreadAffinityMask設置THREAD的親和性不是整個過程。如果您檢查返回值,您應該看到SetThreadAffinityMask失敗。要獲得當前線程使用GetCurrentThread()而不是GetCurrentProcess()。如果你想設置的全過程的親和力使用代碼

即改變

SetThreadAffinityMask(GetCurrentThread(),1) 

SetProcessAffinityMask(GetCurrentProcess(),1)