Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-101103
Nona
2002-10-07 21:12
2002.10.31
Помогите а то я уж запарился!


3-101049
zavdim
2002-10-04 06:56
2002.10.31
MySQL


3-101118
tts0
2002-10-09 19:24
2002.10.31
BDE жрет память. Может это напрасно?


3-101080
MAXL
2002-10-14 10:53
2002.10.31
ПРОБЛЕМА С ADOTable и MSAccess работаю с DELPHI 7


1-101360
Keplin Sergey
2002-10-20 20:43
2002.10.31
Frames





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский