QueryPerformanceCounter(&Start); //Определяются затраты времени Wremjal QueryPerformanceCounterC&Finish); //на вызов самой функции. QueryPerformanceCounterC);
Wremjal - (int)( Finish.QuadPart- Start.QuadPart): //В переменную Wremja2 заносим время суммирования элементов массива: QueryPerformanceCounter(&Start); for (i=0;i<20:i++) for (j-0:j<20;j++) Sum+ - Test[i][j]: QueryPerformanceCounterC&Finish); Wremja2«(int)( Finish.QuadPart- Start.QuadPart); //Выводим результаты на экран:
sprintf(S." Накладные затраты %д мкс \п Время суммирования %д мкс \
Wremjal/kF.(Wremja2-Wremjal)/kF); MessageBoxC NULL.S."mi TTi me".0):
}
break:
Полный текст находится в проекте QueryPerformance.
Работая в среде Windows 89, я обнаружил, что эти функции при получении результата делили истинную тактовую частоту на постоянный коэффициент, имитируя поступление импульсов с частотой /0, обычно равной или кратной входной частоте стандартного таймера - 1 193 180 Гц. Сейчас в среде ХР и с другим процессором функция QueryPerformanceFrequencyO возвращает мне правильное значение тактовой частоты. Изменилась ли реализация функции или аппаратная реализация того счетчика, к которому она обращается, справочная система не поясняет. Но в дальнейшем мы будем получать тактовую частоту при помощи этой функции.
Использование разных способов измерения полезно, если программиста интересует погрешность полученных оценок времени. Можно считать, что она не превышает разности результатов при использовании rdstc и QueryPerformanceCounter.
Измерение временных интервалов
В файлах Utils.cpp и Utils.h находятся функции и макросы, предназначенные для фиксации с минимальной погрешностью времени прохождения вычислительным процессом нескольких контрольных точек. Для использования различными демонстрационными проектами они помещены в отдельную папку UTILS.
Задания для самостоятельного выполнения
1. Запустите проект minim. Щелкнув несколько раз по основному окну левой кнопкой, можно увидеть, что в ответ на каждый щелчок появляются два сообщения, как показано на рис. 4.2. При щелчке правой кнопкой такого не происходит. Как и положено модальному диалогу, он блокирует поступление новых сообщений в основное окно.