5
A
回答
1
這是可能的,因爲Process Explorer可以做到這一點,但我認爲你將不得不使用某種未公開的Windows API。 PSAPI有些接近,但它只提供內存使用信息,而不是CPU或磁盤利用率。
10
至於CPU利用率,看看這個鏈接Windows C++ Get CPU and Memory Utilisation With Performance Counters後不難做到。據我瞭解(但還沒有測試),也可以找出磁盤利用率。
這個想法是使用Performance Counters。在您的情況下,您需要將性能計數器L"\\Process(program_you_are_interested_in_name)\\% Processor Time"
用於CPU利用率,並可能使用性能計數器L"\\Process(program_you_are_interested_in_name)\\Data Bytes/sec"
進行磁盤操作。由於我不確定您需要了解磁盤操作的哪些參數,所以您可以自己查看所有可用參數的列表:Process Object
例如,如果您有名爲a_program_name.exe
的併發程序,則可以找到它CPU利用率至少測量性能計數器的兩倍L"\\Process(a_program_name)\\% Processor Time"
。在這個例子中,它是在一個循環中完成的。順便說一下,使用此測試測量在多核處理器上運行的多線程應用程序可能會使CPU利用率超過100%。
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h>
#include <string.h>
#include <string>
#include <iostream>
// Put name of your process here!!!!
CONST PWSTR COUNTER_PATH = L"\\Process(a_program_name)\\% Processor Time";
void main(int argc, char *argv[]){
PDH_HQUERY hquery;
PDH_HCOUNTER hcountercpu;
PDH_STATUS status;
LPSTR pMessage;
PDH_FMT_COUNTERVALUE countervalcpu;
if((status=PdhOpenQuery(NULL, 0, &hquery))!=ERROR_SUCCESS){
printf("PdhOpenQuery %lx\n", status);
goto END;
}
if((status=PdhAddCounter(hquery,COUNTER_PATH,0, &hcountercpu))!=ERROR_SUCCESS){
printf("PdhAddCounter (cpu) %lx\n", status);
goto END;
}
/*Start outside the loop as CPU requires difference
between two PdhCollectQueryData s*/
if((status=PdhCollectQueryData(hquery))!=ERROR_SUCCESS){
printf("PdhCollectQueryData %lx\n", status);
goto END;
}
while(true){
if((status=PdhCollectQueryData(hquery))!=ERROR_SUCCESS){
printf("PdhCollectQueryData %lx\n", status);
goto END;
}
if((status=PdhGetFormattedCounterValue(hcountercpu, PDH_FMT_LONG | PDH_FMT_NOCAP100, 0, &countervalcpu))!=ERROR_SUCCESS){
printf("PdhGetFormattedCounterValue(cpu) %lx\n", status);
goto END;
}
printf("cpu %3d%%\n", countervalcpu.longValue);
Sleep(1000);
}
END:
;
}
還有一件事要提。 PdhExpandWildCardPath
可讓您在計算機上運行的進程列表中展開這樣的字符串,例如L"\\Process(*)\\% Processor Time"
。然後你可以查詢每個進程的性能計數器。
相關問題
- 1. Spark CPU利用率監測
- 2. 磁盤利用率與DriveInfo []
- 3. CPU利用率和線程
- 4. 監控ASP.NET應用程序內存和磁盤使用情況
- 5. PowerShell腳本來獲得CPU利用率,磁盤空間,MemoryUsage和用戶
- 6. 如何合併PowerShell腳本以在一個csv文件中獲取磁盤已用空間,磁盤空閒空間,cpu利用率和內存利用率?
- 7. 監視系統CPU,內存,磁盤I/O和網絡使用頻率差異
- 8. FFMPEG和CPU利用率
- 9. 用於在Linux上監控磁盤I/O速率的腳本
- 10. 節點應用程序的高CPU利用率應用程序
- 11. CPU利用率6
- 12. CPU利用率高
- 13. CPU使用率和CPU利用率之間的區別?
- 14. Powershell腳本捕獲磁盤(C&D)可用空間,無內存,CPU使用率和網絡利用率
- 15. java的多線程的CPU利用率
- 16. VB.NET:監控磁盤使用情況
- 17. 打印CPU使用率,磁盤使用率,RAM使用率的bash腳本
- 18. 檢索進程的CPU利用率
- 19. UNIX上的CPU利用率
- 20. 如何監控資源利用率?
- 21. 監控Java中的磁盤活動
- 22. 簡單程序的高CPU使用率
- 23. Git的100%的CPU使用率掛起(這是磁盤問題)
- 24. 如何在運行時控制線程的CPU利用率?
- 25. Java線程 - 高cpu利用率?
- 26. 線程長,CPU利用率高
- 27. AWS RDS CPU利用率100%
- 28. WP7,高CPU利用率
- 29. RDS實例CPU利用率
- 30. JMeter CPU利用率報告
「我想要的代碼」是您在公司程序員經理時所說的話。你知道,工作。我們幫助,而不是工作。 :) – GManNickG 2010-03-19 06:23:01
GMan:太對了。我有沒有這樣做過,我的眼睛現在重新解釋了?我認爲非英語用戶在表示他們需要幫助或知道哪些API(「代碼」)有用時通常會使用該短語。 – 2010-03-19 06:28:08
'top'? ______ – kennytm 2010-03-19 06:29:04