Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. С реальными все в порядке (использую QueryPerformanceCounter), а со вторыми — проблема. Не могу найти способ получить именно время затраченное _процессором_ на выполнения программы. По стандарту функция clock() должна мне давать процессорное время. У меня же она выдает реальное время. Проверял просто — заставлял программу переходить в Idle-состояние на время N сек/мин/etc. Процессор при этом не нагружался. Затем, как обычно, по разнице значений двух clock() вычислял время — оно оказывалось каждый раз ровно или почти ровно N.
Как решить такую проблему в Windows? Я пока не нашел подходящего API.
Здравствуйте, Rarruga, Вы писали:
R>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. С реальными все в порядке (использую QueryPerformanceCounter), а со вторыми — проблема. Не могу найти способ получить именно время затраченное _процессором_ на выполнения программы. По стандарту функция clock() должна мне давать процессорное время. У меня же она выдает реальное время. Проверял просто — заставлял программу переходить в Idle-состояние на время N сек/мин/etc. Процессор при этом не нагружался. Затем, как обычно, по разнице значений двух clock() вычислял время — оно оказывалось каждый раз ровно или почти ровно N.
R>Как решить такую проблему в Windows? Я пока не нашел подходящего API.
Здравствуйте, Сергей Мухин, Вы писали:
R>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.
СМ>GetProcessTimes
Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime
для получения процессорного времени?
Здравствуйте, Rarruga, Вы писали:
R>Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime R>для получения процессорного времени?
R>>Спасибо! Я не знаю тонкостей Windows, поэтому возник вопрос с этой функцией: нужно ли мне складывать lpKernelTime и lpUserTime R>>для получения процессорного времени?
СМ>наверно да.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, Rarruga, Вы писали:
R>>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. R>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.
СМ>GetProcessTimes
А для многопоточного приложения — GetThreadTimes на каждый из потоков, так как GetProcessTimes вернёт интегральное значение.
Здравствуйте, McQwerty, Вы писали:
MQ>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>Здравствуйте, Rarruga, Вы писали:
R>>>Разрабатывается программа на С и нужно внутри нее замерять реальные промежутки времени и процессорные. R>>>Как решить такую проблему в Windows? Я пока не нашел подходящего API.
СМ>>GetProcessTimes
MQ>А для многопоточного приложения — GetThreadTimes на каждый из потоков, так как GetProcessTimes вернёт интегральное значение.
совершенно верно, но тут речь идет о задаче, а подразумевается процесс. При этом некоторые thread'ы уже могут закончиться (а handle освожбождены), и тогда мы не получим их времена уже никогда. Так что GetProcessTimes тут кажется более уместным