Форум: "WinAPI";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизПроцент загруженности процессора Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c