2009-10-02 60 views
1

有沒有辦法通過DLL調用或其他方式獲取windows xp中的系統cpu負載。我想在我的程序中嵌入呼叫,當CPU負載達到100%時,我想捕獲時間。我的程序每隔幾天就會執行一次cpu加載,我想知道何時可以進行數據轉儲並分析數據。以編程方式監視XP上的CPU負載

謝謝!

回答

1

您可以使用性能計數器。

"Using the PDH Functions to Consume Counter Data"

,你應該使用特定的計數器是處理器時間:

處理器時間的時間,處理器執行非空閒線程的百分比。 該計數器被設計爲處理器活動的主要指標。 它是通過測量處理器在每個採樣間隔中執行空閒進程- 線程的時間並從100%中減去該值來計算的。 (每個處理器有一個空閒線程,當沒有其他線程準備運行時會消耗週期)。 它可以看作是花在做有用工作上的樣本間隔的百分比。 該計數器顯示採樣間隔期間觀察到的繁忙時間的平均百分比。 它通過監視服務處於非活動狀態的時間進行計算,然後從100%中減去該值。

#define _PROCESSOR_COUNTER _T("\\Processor(0)\\% Processor Time") 
0

NtQuerySystemInformation()看起來相關,但似乎是(半)不推薦/內部,不推薦使用。它列出了其他要使用的功能的建議。其中,看起來GetSystemTimes()應該是有用的,如果你運行兩次之間已知的延遲。

0

顯然,你只有當/如果你程序使用100%的CPU在意。爲了使這個工作成爲同一個進程的一部分,你需要在提高優先級的單獨線程中運行監控代碼(所以即使程序的其餘部分佔用了CPU的100%也會運行)。它將大部分時間都在睡覺,但是會定期調用GetProcessTimes()來查找它的進程佔用了多少CPU時間。