![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Время работы процесса ! [D6, WinXP]
psa247 © (2005-12-05 11:23:00)Как узнать время работы процесса?
Делаю через CreateTime(NTQuerySystemInformation).
Хочу найти разницу между GetTickCount и Create_Time, допустим, в миллисекундах.
Проблема с переводом из Large_Integer в удобочитаемое представление, выдает очень большое число по сравнению с тем, что должно быть.
psa247 (2005-12-05 13:31:00) [1]Нашел ошибку. Спасибо.
psa247 (2005-12-05 13:21:00) [2]
> psa247 © (05.12.05 13:03) [7]
Показывает, что процесс запущен дней 20 назад
psa247 (2005-12-05 13:03:00) [3]
> BiN ©
function ProcessWorkTime(Pr_ID : cardinal): string;
var hProcess : THandle;
cur : cardinal;
T : TDateTime;
d, h, m, s, msec : Word;
ftKernel, ftUser, ftCreate, ftExit, ftLocal : TFILETIME;
stLocal : TSYSTEMTIME;
begin
hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, Pr_Id);
GetProcessTimes(hProcess,ftCreate,ftExit,ftKernel,ftUser);
cur:= ftCreate.dwLowDateTime + ftCreate.dwHighDateTime * DWORD(-1);
CloseHandle(hProcess);
// FileTimeToLocalFileTime(ftCreate, ftLocal);
FileTimeToSystemTime(ftLocal, stLocal);
{ T:= (GetTickCount - Cardinal(cur)) / (MSecsPerDay);
d:= Trunc(T);
DecodeTime(T-d, h, m, s, msec);
}
d:= stLocal.wDay;
h:= stLocal.wHour;
m:= stLocal.wMinute;
s:= stLocal.wSecond;
Result:= Format('%02d д %02d:%02d:%02d', [d, h, m, s]);
end;
BiN (2005-12-05 12:38:00) [4]FileTimeToSystemTime
psa247 (2005-12-05 12:20:00) [5]Не получается:
hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId);
GetProcessTimes(hProcess,Creat,Exi,Kern,User);
cur:= creat.dwLowDateTime + Creat.dwHighDateTime * DWORD(-1);
T:= (GetTickCount - cur) / MSecsPerDay;
d:= Trunc(T);
DecodeTime(T-d, h, m, s, msec);
tmp:= Format('%2d д %2d:%2d:%2d', [d, h, m, s]);
?
Там еще что-то написано про 100 нсек... не понял
psa247 (2005-12-05 11:37:00) [6]
> BiN © (05.12.05 11:33) [1]
Ok, попробую...
Anatoly Podgoretsky (2005-12-05 11:35:00) [7]Пврдон, перепутал процесс с процессором
GetThreadTimes
Anatoly Podgoretsky (2005-12-05 11:34:00) [8]Время работы процессора можно узнать с помощью RDTSC или QueryPerformanceCounter
BiN (2005-12-05 11:33:00) [9]GetProcessTimes