//Ожидаем изменения показаний, чтобы привязать начало интервала //к поступлению сигнала таймера, 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) {


⇐ Предыдущая| |Следующая ⇒