Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Время работы процесса ! [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо