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 39 40 41 42
| var
hProcessHandle: THandle;
nDebut, nFin, nKernelTime1, nUserTime1, nKernelTime2, nUserTime2: Int64;
lpCreationTime, lpExitTime, lpKernelTime, lpUserTime: _FILETIME; // TFileTime
lpsKernelTime, lpsUserTime: _SYSTEMTIME;
begin
hProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessEntry.th32ProcessID);
try
if not GetProcessTimes(hProcessHandle, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime) then
begin
Application.MessageBox(PChar('GetProcessTimes 1' + #13#10 + SysErrorMessage(GetLastError)), PChar(Caption + ' - erreur'), MB_ICONERROR + MB_OK);
Exit;
end;
if not FileTimeToSystemTime(lpKernelTime, lpsKernelTime) then
Exit;
nKernelTime1 := (lpsKernelTime.wHour * 60 * 60 * 1000) + (lpsKernelTime.wMinute * 60 * 1000) + (lpsKernelTime.wSecond * 1000) + lpsKernelTime.wMilliseconds;
if not FileTimeToSystemTime(lpUserTime, lpsUserTime) then
Exit;
nUserTime1 := (lpsUserTime.wHour * 60 * 60 * 1000) + (lpsUserTime.wMinute * 60 * 1000) + (lpsUserTime.wSecond * 1000) + lpsUserTime.wMilliseconds;
//.Pause (nano-secondes).
QueryPerformanceCounter(nDebut);
repeat
QueryPerformanceCounter(nFin);
until((nFin - nDebut) > 5000000);
if not GetProcessTimes(hProcessHandle, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime) then
begin
Application.MessageBox(PChar('GetProcessTimes 2' + #13#10 + SysErrorMessage(GetLastError)), PChar(Caption + ' - erreur'), MB_ICONERROR + MB_OK);
Exit;
end;
if not FileTimeToSystemTime(lpKernelTime, lpsKernelTime) then
Exit;
nKernelTime2 := (lpsKernelTime.wHour * 60 * 60 * 1000) + (lpsKernelTime.wMinute * 60 * 1000) + (lpsKernelTime.wSecond * 1000) + lpsKernelTime.wMilliseconds;
if not FileTimeToSystemTime(lpUserTime, lpsUserTime) then
Exit;
nUserTime2 := (lpsUserTime.wHour * 60 * 60 * 1000) + (lpsUserTime.wMinute * 60 * 1000) + (lpsUserTime.wSecond * 1000) + lpsUserTime.wMilliseconds;
_dTempsProcesseur := 100 - 100 * ( ? ) / (nKernelTime1 + nUserTime1) - (nKernelTime2 + nUserTime2);
finally
CloseHandle(hProcessHandle);
end; |
Partager