Процессорное время выполнения программы.
От: Rarruga  
Дата: 26.09.08 14:44
Оценка:
Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. С реальными все в порядке (использую QueryPerformanceCounter), а со вторыми — проблема. Не могу найти способ получить именно время затраченное _процессором_ на выполнения программы. По стандарту функция clock() должна мне давать процессорное время. У меня же она выдает реальное время. Проверял просто — заставлял программу переходить в Idle-состояние на время N сек/мин/etc. Процессор при этом не нагружался. Затем, как обычно, по разнице значений двух clock() вычислял время — оно оказывалось каждый раз ровно или почти ровно N.

Как решить такую проблему в Windows? Я пока не нашел подходящего API.
Re: Процессорное время выполнения программы.
От: Сергей Мухин Россия  
Дата: 26.09.08 14:46
Оценка:
Здравствуйте, Rarruga, Вы писали:

R>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. С реальными все в порядке (использую QueryPerformanceCounter), а со вторыми — проблема. Не могу найти способ получить именно время затраченное _процессором_ на выполнения программы. По стандарту функция clock() должна мне давать процессорное время. У меня же она выдает реальное время. Проверял просто — заставлял программу переходить в Idle-состояние на время N сек/мин/etc. Процессор при этом не нагружался. Затем, как обычно, по разнице значений двух clock() вычислял время — оно оказывалось каждый раз ровно или почти ровно N.


R>Как решить такую проблему в Windows? Я пока не нашел подходящего API.


GetProcessTimes
---
С уважением,
Сергей Мухин
Re[2]: Процессорное время выполнения программы.
От: Rarruga  
Дата: 26.09.08 14:50
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

R>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.


СМ>GetProcessTimes


Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime
для получения процессорного времени?
Re[3]: Процессорное время выполнения программы.
От: Сергей Мухин Россия  
Дата: 26.09.08 14:52
Оценка:
Здравствуйте, Rarruga, Вы писали:

R>Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime

R>для получения процессорного времени?

наверно да.
---
С уважением,
Сергей Мухин
Re[4]: Процессорное время выполнения программы.
От: Rarruga  
Дата: 26.09.08 15:26
Оценка:
R>>Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime
R>>для получения процессорного времени?

СМ>наверно да.


Ок, еще раз спасибо.
Re[3]: Процессорное время выполнения программы.
От: x64 Россия  
Дата: 26.09.08 16:01
Оценка:
R>нужно ли мне складывать lpKernelTime и lpUserTime для получения процессорного времени?

Да.
Re[2]: Процессорное время выполнения программы.
От: McQwerty Россия  
Дата: 28.09.08 09:11
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, Rarruga, Вы писали:


R>>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные.

R>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.

СМ>GetProcessTimes


А для многопоточного приложения — GetThreadTimes на каждый из потоков, так как GetProcessTimes вернёт интегральное значение.
Re[3]: Процессорное время выполнения программы.
От: Сергей Мухин Россия  
Дата: 28.09.08 09:20
Оценка:
Здравствуйте, McQwerty, Вы писали:

MQ>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>Здравствуйте, Rarruga, Вы писали:


R>>>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные.

R>>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.

СМ>>GetProcessTimes


MQ>А для многопоточного приложения — GetThreadTimes на каждый из потоков, так как GetProcessTimes вернёт интегральное значение.


совершенно верно, но тут речь идет о задаче, а подразумевается процесс. При этом некоторые thread'ы уже могут закончиться (а handle освожбождены), и тогда мы не получим их времена уже никогда. Так что GetProcessTimes тут кажется более уместным
---
С уважением,
Сергей Мухин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.