Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WinCE timer
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
diwil
Уважаемые,
кто может подсказать, как в винде измерить время, затраченное процессом для выполнения куска кода?

То что я нашел - это использовать внутренний счетчик как (однгако он учитывает время, затраченное на переключение контекста, прерывания и т.д.):

QueryPerformanceCounter(&pc1);
....... часть измеряемого кода .............
QueryPerformanceCounter(&pc2);

потом их разность дает фантастические результаты -
от отрицательного времени выполнения большого куска кода, до нескольких часов.

Заранее благодарен
abcdefg
Какая платформа?
Например, для SMDK2410 есть ошибка реализации в функции INT32 OALTimerCountsSinceSysTick() которая отвечает за этот счетчик

Цитата(diwil @ Apr 30 2009, 12:43) *
Уважаемые,
кто может подсказать, как в винде измерить время, затраченное процессом для выполнения куска кода?

То что я нашел - это использовать внутренний счетчик как (однгако он учитывает время, затраченное на переключение контекста, прерывания и т.д.):

QueryPerformanceCounter(&pc1);
....... часть измеряемого кода .............
QueryPerformanceCounter(&pc2);

потом их разность дает фантастические результаты -
от отрицательного времени выполнения большого куска кода, до нескольких часов.

Заранее благодарен
SBE
Проверили, что PerformanceCounter реализован в на вашей платформе? По значению возвращаемому QueryPerformanceCounter или QueryPerformanceFrequency. У меня такой способ определения интервалов времени работает без проблем.

Только это не то, что следует использовать для профилировки времени выполнения, поскольку считать будет истекшее (Ellapsed time) время, а не время выполнения вашего кода (Application time). Удобнее использовать тулзы Remote Call profiler или Remote Kernel Tracker. Первый может давать времена выполнения кода процедур и т.п. с тем же разрешением, что и PerformanceCounter. Второй показывать графики выполнения с переключениями между потоками, и из него тоже можно получить время выполнения между событиями (чуть большими ухищрениями).

Наверно можно использовать GetThreadTimes для получения чистого времени исполнения потока, не пробовал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.