| Автор
| Сообщение |
|
|
|
Цитата |
|
Привет Всем!
Делаю через NtQuerySystemInformation
получаем KernelTime и UserTime типа Large_Integer
Процентное соотношение не корректное, где ошибка - не вижу.
function GetProcessCPUUsage(PID : Cardinal; KernelTime, UserTime : LARGE_INTEGER): integer;
var i : integer;
LoDWORD, HiDWORD : DWORD;
tmp, tmp2 : real;
begin
Result:= 0;
if ProcessTimersCount > 0 then
for i:= 0 to ProcessTimersCount -1 do
if ProcessTimers[i].PID = PID then begin
HiDWORD:= KernelTime.HighPart - ProcessTimers[i].KernelTime.HighPart;
LoDWORD:= KernelTime.LowPart - ProcessTimers[i].KernelTime.LowPart;
tmp:= LoDWORD + HiDWORD;// * DWORD(-1);
tmp2:= GetTickCount;// - ProcessTimers[i].Time;
Result:= Round(100 * tmp / tmp2);
if Result > 100 then Result:= 100;
ProcessTimers[i].KernelTime:= KernelTime;
ProcessTimers[i].UserTime:= UserTime;
ProcessTimers[i].Time:= ROund(tmp2);
exit;
end;
Inc(ProcessTimersCount);
SetLength(ProcessTimers, ProcessTimersCount);
ProcessTimers[ProcessTimersCount -1].PID:= PID;
ProcessTimers[ProcessTimersCount -1].KernelTime:= KernelTime;
ProcessTimers[ProcessTimersCount -1].UserTime:= UserTime;
ProcessTimers[ProcessTimersCount -1].Time:= GetTickCount;
end; |
|
| В начало |
|
 |
|
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | tmp:= LoDWORD + HiDWORD;// * DWORD(-1); |
думаю, здесь нужно вот так
| Код: | | tmp:= LoDWORD + HiDWORD shl 32; |
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
С небольшими изменениями, будет так:
tmp:= LoDWORD + HiDWORD * DWORD(-1);// shl 32;
tmp2:= GetTickCount - ProcessTimers[i].Time;
Result:= Round(tmp / tmp2 / 100);
if Result > 100 then Result:= 100;
ProcessTimers[i].KernelTime:= KernelTime;
ProcessTimers[i].UserTime:= UserTime;
ProcessTimers[i].Time:= GetTickCount;
exit;
end;
Остается глюк - Бездействие системы. По идее оно должно быть разницой м/у 100% и суммой загрузки проца на каждый процесс. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
| Цитата: | | По идее оно должно быть разницой м/у 100% и суммой загрузки проца на каждый процесс |
Так и есть. Считается вручную. Посмотри старые темы годков этак 2002-2003. Я там писал и аттачил типа "Диспетчер задач"  _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Спасибо, премного благодарен  |
|
| В начало |
|
 |
|