Wie für die CPU-Nutzung ist es nicht schwer, nach dem Blick auf diesen Link Windows C++ Get CPU and Memory Utilisation With Performance Counters zu tun. Soweit ich es verstehe (aber nicht getestet habe), ist es auch möglich, die Festplattenauslastung herauszufinden.
Die Idee ist, Performance Counters zu verwenden. In Ihrer Situation müssen Sie den Leistungszähler L"\\Process(program_you_are_interested_in_name)\\% Processor Time"
für CPU-Auslastung und möglicherweise L"\\Process(program_you_are_interested_in_name)\\Data Bytes/sec"
für Datenträgervorgänge verwenden. Da ich bin nicht sicher, welche Parameter Sie Plattenoperationen wissen müssen genau können Sie ein, sich in der Liste aller verfügbaren Parameter betrachten: Process Object
Wenn Sie zum Beispiel ein konkurrierendes Programm mit dem Namen haben a_program_name.exe
können Sie finden die CPU-Auslastung mindestens zweimal den Leistungszähler messen L"\\Process(a_program_name)\\% Processor Time"
. Im Beispiel wird es in einer Schleife gemacht. Übrigens kann eine Multithread-Anwendung, die auf einem Multicore-Prozessor läuft, eine CPU-Auslastung von mehr als 100% ergeben.
#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:
;
}
Es gibt noch etwas zu erwähnen. PdhExpandWildCardPath
können Sie eine Zeichenfolge wie diese L"\\Process(*)\\% Processor Time"
in einer Liste von Prozessen auf einem Computer erweitern. Und dann können Sie Leistungsindikatoren für jeden Prozess abfragen.
"Ich möchte den Code" ist etwas, was Sie sagen, wenn Sie ein Manager von Programmierern in einem Unternehmen sind. Weißt du, arbeite. Wir helfen, nicht arbeiten. :) – GManNickG
GMan: Zu wahr. War ich so verletzt, dass meine Augen das jetzt neu interpretieren? Ich denke, es ist üblich, dass Nicht-Englisch-Sprecher diesen Satz verwenden, wenn sie meinen, dass sie Hilfe benötigen oder wissen, welche APIs ("der Code") nützlich sind. –
'oben'? ________ – kennytm