сразу прошу прощения за кривой русский (12 лет в загранке дают о себе знать)
у меня такой вопрос:
как можно определить cpu-время (%) занимаемое
одним процессом (например idle занимает почти всегда 98%)?
пишу прогу наподобее task-manager под nt/w2k
перечисление процессов делаю с помощью NtQuerySystemInformation,
получаю при етом кучу информатии, но без cpu-time.
А еще поищите в группо-гугле GetProcessTimes.
(GetProcessTimes(ProcessHandle,&CreationTime,&ExitTime,&KernelTime,&UserTime)
Поможет, наверное.
HINT: всегда старайтесь поискать сначала в группо-гугле. Там на 99.99 процентов таких вопросов есть _очень_ хорошие ответы.
T>у меня такой вопрос: T>как можно определить cpu-время (%) занимаемое T>одним процессом (например idle занимает почти всегда 98%)?
Здравствуйте Andrew S, Вы писали:
AS>Почитайте здесь
AS>А еще поищите в группо-гугле GetProcessTimes. AS>(GetProcessTimes(ProcessHandle,&CreationTime,&ExitTime,&KernelTime,&UserTime) AS>Поможет, наверное.
AS>HINT: всегда старайтесь поискать сначала в группо-гугле. Там на 99.99 процентов таких вопросов есть _очень_ хорошие ответы.
да ето я в принципе знал.
taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса.
мне нужно "usage" в процентах.
всеравно огромное спасибо,
я про группо-гугле не знал.
Ну так посчитайте сумму времени всех процессов
T>да ето я в принципе знал. T>taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса. T>мне нужно "usage" в процентах.
T> T>всеравно огромное спасибо, T>я про группо-гугле не знал.
Здравствуйте Andrew S, Вы писали:
AS>Ну так посчитайте сумму времени всех процессов
T>>да ето я в принципе знал. T>>taskmanger тоже так делает: KernelTime + UserTime = CPU-Usage от одного процесса. T>>мне нужно "usage" в процентах.
T>> T>>всеравно огромное спасибо, T>>я про группо-гугле не знал.
да мне не надо общую "cpu-usage", мне
нужно именно от одного процесса.
Это собственно Overall cpu usage. А текущий процент использования можно посчитать исходя из приращений относительно предыдущего измерения. Например, если ты измерения делаешь 1 раз в секунду и у тебя приращение времени == K(t+1) + U(t+1) — (K(t) + U(t)) относительно пред. равно 100ms — тогда 100/1000 = 10%. Гуд?
T> T>да мне не надо общую "cpu-usage", мне T>нужно именно от одного процесса.
Здравствуйте 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: если чё, придётся мне вас(тебя?) опять побеспокоить
Здравствуйте Andrew S, Вы писали:
AS>А еще поищите в группо-гугле GetProcessTimes.
Для процессов все хорошо — OpenProcess есть везде (NT 4.0). Для потоков немного посложнее будет — OpenThread только в Win2K. Можно пользоваться не очень документированными способами получения handle по идентификатору, но я в свое время использовал чтение HKEY_PERFORMANCE_DATA. Там обо всем, в т.ч. о потоках, о процессах и о многом другом.
Удачи!