//Ожидаем изменения показаний, чтобы привязать начало интервала //к поступлению сигнала таймера, while (timeGetTimeC)-dwStartO<l);
dwStart - timeGetTimeC); //Начало интервала в миллисекундах.
Start - HightTimeO; //Начало интервала в тактах процессора.
while(timeGetTimeC) - dwStart <- Tick); //Ожидание конца интервала.
Finish - HightTimeO; //Конец интервала в тактах процессора.
Res.Speed «(double)(Finish-Start-Temp)/1000.0/Tick; //Тактовая частота.
Start - HightTimeO;
Finish - HightTimeO;
Res.Over - (int)CFinish-Start);
// А это накладные затраты на отсчет числа тактов.
sprintfCRes.ss." Процессор X6.1f МГц ".Res.Speed);
if(hWnd) //Если функции передан дескриптор окна.
{GetWindowText (hWnd.s.85); //Считываем заголовок окна и strcat (Res.ss.s): //добавляем к заголовку тактовую частоту.
SetWi ndowText(hWnd.Res.s s);
}
return Res; }
Измерение временных интервалов
Точность калибровки можно увеличить, отсчитывая интервал при помощи специализированного мультимедиа-таймера, который будет рассматриваться позже. Существует также возможность запросить значение тактовой частоты у операционной системы. Для начала нужно измерить тактовую частоту при старте приложения, как это показано в листинге 4.7.
Листинг 4.7
int APIENTRY WinMain (HINSTANCE KodPril.HINSTANCE.LPSTR.int Oknlcon) {
MSG msg;
if (InitApp(KodPril)) return 1;
SpeedCPU - Calibrate (lOOO.hWnd);
while (GetMessageULPMSG) &msg. NULL. 0. 0))
DispatchMessage( (LPMSG) &msg ); return 0: }
Теперь нужно создать оконную процедуру, которая по щелчку левой кнопкой мыши определяет затраты времени на подсчет суммы элементов матрицы Test[20] [20]. По щелчку правой кнопкой мыши программа должна делать то же самое при помощи счетчика TSC. Соответствующий код приведен в листинге 4.8.
Листинг 4.8
int Test[20][20]; //Программа подсчитывает сумму элементов этого массива. LRESULT APIENTRY InputWndProc (HWND UkOkn.UINT message.WPARAM
wParam.LPARAM IParam)
{
char i.j; //Индексы массива.
int Sum - 0; //Переменная для подсчета суммы элементов, char S[80]; //Строка для вывода результатов на экран, switch (message) {