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

Вниз

Как получить % загрузки процесора конкретным приложением?   Найти похожие ветки 

 
igornov   (2002-09-11 17:50) [0]

Hi All!

Требуется следить за активностью приложения и через заданное время если приложение простаивает, то завершить его. Я так понимаю мне нужно то о чём говорится в теме?
Имя процесса я могу получить, а также его ID. Как мне узнать
%? Или может есть какие-либо другие способы отслеживания активности приложения?

Заранее благодарен за помощь.

С ув. Игорь Новосёлов
ICQ : 46732777


 
Asteroid ©   (2002-09-11 19:15) [1]

Можно посмотреть в реестре (HKEY_DYN_DATA, а дальше еще что-то), но там информация неправильная. Во всяком случае у меня в 98SE и в ME было так.


 
igornov   (2002-09-12 13:44) [2]

Что-то я не нашёл ключа HKEY_DYN_DATA в реестре w2k...


 
troits ©   (2002-09-12 15:48) [3]

Мне кажется, можно попробовать GetProcessTimes.
То есть, например, получить User Time + Kernel Time для всех запущенных процессов за какой - то промежуток времени и сравнить с такой же суммой для нашего процесса.

Может, есть способ получше?


 
igornov   (2002-09-17 15:37) [4]

Попробовал я User Time + Kernel Time за промежуток времени.
Идея неплохая... только для того чтобы подсчитать % нужно знать
также время бездействия системы. А как его определить не знаю...


 
troits ©   (2002-09-17 15:53) [5]

А зачем нужно время бездействия? Ведь нас интересует относительная загрузка процессора.

Но может, в данном случае "бездействие" процесса попробовать детектировать с помощью WaitForInputIdle ?


 
igornov   (2002-09-17 16:19) [6]

Да но если все процессы стоят то User Time + Kernel Time и них
не меняется и это значит что отношение User Time + Kernel Time требуемого процесса к User Time + Kernel Time всех процессов неизменно и равно какому-то значению (не 0). А на самом деле процесс стоит... Вот и думаю, что к User Time + Kernel Time всех
процессов нужно добавить Idle ("бездействие системы") тогда и получится реальная цифра... хотя может и ошибаюсь.


 
troits ©   (2002-09-17 17:56) [7]

Я думал смотреть не просто User Time + Kernel Time, а как изменяется эта сумма за произвольный промежуток времени. То есть, если сумма не изменилась, то процесс простаивает (может быть, и вместе со всеми остальными) и его надо завершать.
Все зависит от того, что нужно. Если критерием для "убийства" процесса является просто его "простой", то IMHO лучше всего использовать WaitForInputIdle.


 
igornov   (2002-09-17 18:28) [8]

Я так и делал... Но как оказалось процесс хоть и нет в его главном окне никакого ввода всё равно за промежуток времени 10-15 минут хоть раз но дёргает процессор. Притом на 2000 и на NT4 это работает по-разному. На Nt дёргает а на 2000 всё нормально.
Эти подёргивания длятся несколько милисекунд. Так что если бы на милисекунды не обращать внимания то было бы всё ок. Но не могу
получить в нормальном виде в Delphi значение User Time + Kernel Time чтобы отбросить милисекунды. Как расшифровать эти значения?
...А WaitForInputIdle как я понял следит за отсутствием клавиатурного ввода в процесс, но мне этого мало - этот процесс
может работать длительное время в авторежиме(без клавиатуры) и тогда его снимать не надо, в только тогда когда он действительно ничего не делает.


 
troits ©   (2002-09-18 17:55) [9]

С помощью API - ф-ции FileTimeToSystemTime получаем стр-ру TSystemTime, где время в "нормальном" виде.
Если надо еще как-то с ним поработать, складывать или вычитать, можно воспользоваться дельфийским типом TDateTime и SysUtils - овской SystemTimeToDateTime.



 
igornov   (2002-09-19 10:24) [10]

Спасибо!
Всё получилось... но как и следовало ожидать возникли другие проблемы. Я написал программу которая делает выше описанное в виде сервиса, который запускается под сетевым логином входящим в
Domain Admins. Если на локальной машине загружается профиль с правами администратора данной машины то всё работает как часы.
Но если загружается профиль с правами обычного пользователя, то
сервис хоть он и запускается с правами админа, не видит процессов других пользователей...видит только себя. Пробовал
на локальной машине дать группе "пользователи" все какие есть права- никаких результатов. Я использую для просмотра процессов модуль PSAPI. Может у него есть какие-либо ограничения?



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
14-101522
Volly
2002-10-11 14:16
2002.10.31
Как зарегистрировать программу?


7-101555
Yaro
2002-08-13 21:58
2002.10.31
Чтение / Запись в LPT-порт !!! (мне надо управлять электроникой!)


7-101544
sukhanov
2002-08-27 08:24
2002.10.31
Определение версии операционки


14-101525
Svin
2002-10-13 02:17
2002.10.31
DelphiX


7-101549
frum
2002-08-21 10:18
2002.10.31
ВЫДИЛЕНИЕ