1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| function ProcessCPUUsage(ProcessID : DWORD): TCPUPourcentage;
var
ProcessHandle : THandle;
TimeCr,TimeEx,TimeKer,TimeUser :FileTime;
STimeKer,STimeUser :SystemTime;
stime:SystemTime ;
itvalS,itvalKer,itValUser:DWord;
Pourc :TCPUPourcentage;
begin
Pourc.pKernel:=0;
Pourc.pUser:=0;
result:=Pourc;
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, ProcessID );
try
if GetProcessTimes(ProcessHandle,TimeCr,TimeEx,TimeKer,TimeUser)then begin
//convertion du temps en systemTime
FileTimeToSystemTime(TimeCr,STimeCr);
FileTimeToSystemTime(TimeKer,STimeKer);
FileTimeToSystemTime(TimeUser,STimeUser);
//récupération du temps systeme
GetSystemtime(stime);
// comparaison avec l'appel précédent
itvalS:=CompTime(sstime,stime);
itvalKer:=CompTime(sstimeker,stimeker);
itvalUser:=CompTime(ssTimeUser,sTimeUser);
// mise à jour des variables globales:
sstime:=stime;
sstimeker:=stimeker;
ssTimeUser:=sTimeUser;
//calcul des pourcentages user et kernel:
Pourc.pKernel:=(itValKer*100)/itValS;
Pourc.pUser:=(itValUser*100)/itValS;
result:=Pourc;
end;
finally
CloseHandle(ProcessHandle);
end;
end; |
Partager