Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.10;
Скачать: CL | DM;

Вниз

Процент загруженности процессора   Найти похожие ветки 

 
fishca   (2003-11-04 14:11) [0]

Как определить процент загруженности процессора конкретным процессом?


 
Song ©   (2003-11-04 14:47) [1]

GetProcessTimes()


 
fishca   (2003-11-04 15:02) [2]

GetProcessTimes

The GetProcessTimes function retrieves timing information for the specified process.

BOOL GetProcessTimes(
HANDLE hProcess,
LPFILETIME lpCreationTime,
LPFILETIME lpExitTime,
LPFILETIME lpKernelTime,
LPFILETIME lpUserTime
);

Parameters
hProcess
[in] Handle to the process whose timing information is sought. This handle must be created with the PROCESS_QUERY_INFORMATION access right. For more information, see Process Security and Access Rights.
lpCreationTime
[out] Pointer to a FILETIME structure that receives the creation time of the process.
lpExitTime
[out] Pointer to a FILETIME structure that receives the exit time of the process. If the process has not exited, the content of this structure is undefined.
lpKernelTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in kernel mode. The time that each of the threads of the process has executed in kernel mode is determined, and then all of those times are summed together to obtain this value.
lpUserTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in user mode. The time that each of the threads of the process has executed in user mode is determined, and then all of those times are summed together to obtain this value.
================================================================
а мне надо немного другое: на сколько процентов процесс загрузил процессор...


 
fishca   (2003-11-05 09:56) [3]

Еще вопросик: как по идентификатору процесса (PID) получить его HANDLE?


 
Игорь Шевченко ©   (2003-11-05 10:06) [4]

fishca (05.11.03 09:56) [3]

OpenProcess


 
fishca   (2003-11-05 10:09) [5]

Уважаемый Игорь Шевченко спасибо за ответ про PID и HANDLE! А может подскажете как процент загруженности процессора конкретным процессом определить?


 
fishca   (2003-11-21 04:39) [6]

Пытаюсь получить процент загрузки процессора конкретным процессом. Вот как я делаю:
создаю переменные:
- liOldIdleTime : LARGE_INTEGER;
- liOldSystemTime : LARGE_INTEGER;

есть функция переводящая LARGE_INTEGER в Double

function Li2Double(x: LARGE_INTEGER): Double;
begin
Result := x.HighPart * 4.294967296E9 + x.LowPart;
end;


я по аналогии с этой функцией создал свою для превода FILETIME в Double

function Ft2Double(x: TFileTime): Double;
begin
Result := x.dwHighDateTime * 4.294967296E9 + x.dwLowDateTime;
end;

далее пытаюсь определить процент загрузки процессом процессора

// get new system time
status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), nil);
if status <> 0 then
Exit;

// get new CPU"s idle time
status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);
if status <> 0 then
Exit;

// CurrentValue = NewValue - OldValue
dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime := dbIdleTime / dbSystemTime;

// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
//dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;
dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;

// store new CPU"s idle and system time
liOldIdleTime := SysPerfInfo.liIdleTime;
liOldSystemTime := SysTimeInfo.liKeSystemTime;

//далее вычисляю для своего процесса:
dbProcTimeOld := Ft2Double(ProcessKernelTime) + Ft2Double(ProcessUserTime);

GetProcessTimes(handle,ProcessCreationTime, ProcessExitTime, ProcessKernelTime, ProcessUserTime);

dbProcTime := Ft2Double(ProcessCreationTime) + Ft2Double(ProcessUserTime);

// вычисляем разницу
delta := dbProcTime - dbProcTimeOld;
// теперь как я понимаю надо бы делить delta на dbSystemTime
// в результате должно получиться процентное соотношение
// времени отведенного моему процессу и системе, но
// у меня получается что delta гораздо больше dbSystemTime
// и в результате деления получается больше 100 % практически всегда
// есть мысли что функция Ft2Double дает неверный результат
// помогите кто знает как ее подкорректировать



 
fishca   (2003-11-21 04:53) [7]

Извиняюсь вот эту строчку:
dbProcTime := Ft2Double(ProcessCreationTime) + Ft2Double(ProcessUserTime);
надо заменить на:
dbProcTime := Ft2Double(ProcessKernelTime) + Ft2Double(ProcessUserTime);


 
fishca   (2003-11-21 09:37) [8]

Может кто знает как перевести FILETIME to LARGE_INTEGER или наоборот поделитесь опытом пожалуйста!


 
Игорь Шевченко ©   (2003-11-21 11:55) [9]

fishca (21.11.03 09:37)

В кладовке, в разделе "Готовые программы" лежит программа QuerySystemInformation


 
fishca   (2003-12-03 10:55) [10]

Эту программу я смотрел, но ответа на свой вопрос не нашел?


 
fishca   (2003-12-04 16:19) [11]

Я нашел ответ : http://www.alexfedotov.com/samples/wmitop.asp
Исходник правда на С++, но мне достаточно было этого.
Исходник: http://www.alexfedotov.com/code/wmitop.zip



Страницы: 1 вся ветка

Текущий архив: 2004.02.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-29339
Сергей Уфимский
2004-01-29 15:20
2004.02.10
Cохранение массива в файл.


7-29623
Alexandr3
2003-11-23 04:11
2004.02.10
Epson opos help


6-29503
Forsaz
2003-12-03 20:46
2004.02.10
Пароль и имя USERA в ХР.


7-29624
Maxio
2003-11-25 12:33
2004.02.10
Мегание Label


14-29568
fag2000
2004-01-20 16:07
2004.02.10
Как посмотреть что написано в реестре у другого пользователя.