Помогите германскому чайнику (NTDLL)
От: teekanne  
Дата: 03.11.02 11:39
Оценка:
сразу прошу прощения за кривой русский (12 лет в загранке дают о себе знать)

у меня такой вопрос:
как можно определить cpu-время (%) занимаемое
одним процессом (например idle занимает почти всегда 98%)?

пишу прогу наподобее task-manager под nt/w2k
перечисление процессов делаю с помощью NtQuerySystemInformation,
получаю при етом кучу информатии, но без cpu-time.




заранее благодарен
Re: Помогите германскому чайнику (NTDLL)
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.11.02 14:49
Оценка:
Почитайте здесь

А еще поищите в группо-гугле GetProcessTimes.
(GetProcessTimes(ProcessHandle,&CreationTime,&ExitTime,&KernelTime,&UserTime)
Поможет, наверное.

HINT: всегда старайтесь поискать сначала в группо-гугле. Там на 99.99 процентов таких вопросов есть _очень_ хорошие ответы.

T>у меня такой вопрос:

T>как можно определить cpu-время (%) занимаемое
T>одним процессом (например idle занимает почти всегда 98%)?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Помогите германскому чайнику (NTDLL)
От: teekanne  
Дата: 03.11.02 15:10
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Почитайте здесь


AS>А еще поищите в группо-гугле GetProcessTimes.

AS>(GetProcessTimes(ProcessHandle,&CreationTime,&ExitTime,&KernelTime,&UserTime)
AS>Поможет, наверное.

AS>HINT: всегда старайтесь поискать сначала в группо-гугле. Там на 99.99 процентов таких вопросов есть _очень_ хорошие ответы.


да ето я в принципе знал.
taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса.
мне нужно "usage" в процентах.


всеравно огромное спасибо,
я про группо-гугле не знал.
Re[3]: Помогите германскому чайнику (NTDLL)
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.11.02 15:13
Оценка:
Ну так посчитайте сумму времени всех процессов

T>да ето я в принципе знал.

T>taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса.
T>мне нужно "usage" в процентах.

T>

T>всеравно огромное спасибо,
T>я про группо-гугле не знал.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Помогите германскому чайнику (NTDLL)
От: teekanne  
Дата: 03.11.02 15:23
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Ну так посчитайте сумму времени всех процессов


T>>да ето я в принципе знал.

T>>taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса.
T>>мне нужно "usage" в процентах.

T>>

T>>всеравно огромное спасибо,
T>>я про группо-гугле не знал.


да мне не надо общую "cpu-usage", мне
нужно именно от одного процесса.
Re[5]: Помогите германскому чайнику (NTDLL)
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.11.02 15:44
Оценка: 6 (1)
Тогда вот так:

%%usage = 100 * ((K + U) / (nCpus * (timeNow — CreationTime)))

Это собственно Overall cpu usage. А текущий процент использования можно посчитать исходя из приращений относительно предыдущего измерения. Например, если ты измерения делаешь 1 раз в секунду и у тебя приращение времени == K(t+1) + U(t+1) — (K(t) + U(t)) относительно пред. равно 100ms — тогда 100/1000 = 10%. Гуд?


T>

T>да мне не надо общую "cpu-usage", мне
T>нужно именно от одного процесса.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Помогите германскому чайнику (NTDLL)
От: teekanne  
Дата: 03.11.02 16:11
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Тогда вот так:


AS>%%usage = 100 * ((K + U) / (nCpus * (timeNow — CreationTime)))


AS>Это собственно Overall cpu usage. А текущий процент использования можно посчитать исходя из приращений относительно предыдущего измерения. Например, если ты измерения делаешь 1 раз в секунду и у тебя приращение времени == K(t+1) + U(t+1) — (K(t) + U(t)) относительно пред. равно 100ms — тогда 100/1000 = 10%. Гуд?




sehr gut

вот ето был ответ.
щас попробую применить


громадное спасиба.

ps: если чё, придётся мне вас(тебя?) опять побеспокоить
Re[7]: Помогите германскому чайнику (NTDLL)
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.11.02 16:16
Оценка:
Без проблем.

T>ps: если чё, придётся мне вас(тебя?) опять побеспокоить
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Помогите германскому чайнику (NTDLL)
От: RS Земля ICQ: 148844272
Дата: 05.11.02 15:33
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>А еще поищите в группо-гугле GetProcessTimes.


Для процессов все хорошо — OpenProcess есть везде (NT 4.0). Для потоков немного посложнее будет — OpenThread только в Win2K. Можно пользоваться не очень документированными способами получения handle по идентификатору, но я в свое время использовал чтение HKEY_PERFORMANCE_DATA. Там обо всем, в т.ч. о потоках, о процессах и о многом другом.
Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.