Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.48 MB
Время: 0.009 c
8-29474
ANubis
2003-08-19 21:10
2004.02.10
Bass.dll описание функции BASS_ChannelGetData


1-29319
lipskiy
2004-01-27 22:31
2004.02.10
WinExec не везде выполняется, что неправильно?


14-29574
Petr V. Abramov
2004-01-19 21:03
2004.02.10
Было бы смешно...


1-29389
неважно
2004-02-01 18:42
2004.02.10
Как создать одну процедуру на несколько объектов?


9-29191
Sacred
2003-07-29 00:23
2004.02.10
Поле видемости в GLScene





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский