case WM_DESTROY: PostQuitMessage(O); break:
case WM_LBUTT0ND0WN:
{
DWORD T i me.Ti meO.Count1.Count-0: double Result.Resl:
TimeO - timeGetTimeO; //Читаем текущее время в миллисекундах, while((Time - timeGetTimeO) - TimeO < 1000) Ждем секунду.
{Count++: //Подсчет количества повторений измеряемого фрагмента. //Операторы измеряемого участка программы: for (i-0;i<20;i++) for (j«0;j<20;j++) Sum+ - Test[i][j]:
}
//Время завершения измерения зафиксировано в переменной Time, а количество //повторений измеряемого фрагмента - в переменной Count. Поэтому время одного //прохода в микросекундах равно:
Result - 1000.0*(Time - TimeO) / Count: //Кроме суммирования элементов матрицы, какое-то время тратилось на запрос //времени и организацию цикла. Узнаем его. повторяя цикл еще Count раз //вхолостую, без суммирования:
TimeO - timeGetTimeO;Count 1 - Count:
whileUTime - timeGetTimeO) - TimeO < 1000)if(! (--Countl)) break; Resl - 1000.0*(Time - TimeO) / Count:
Задания для самостоятельного выполнения
//Это накладные затраты на один проход.
//Формируем строку с результатами измерения и выводим ее на экран:
sprintf(S."Накладные затраты %д мкс \п Время %д мкс".Res1.Result-Res1); MessageBox(hWnd. S. "minTime". 0):
}
break;
case WM__RBUTT0ND0WN: //Решаем ту же задачу по щелчку правой кнопкой. {
_int64 Start.Finish; int Wremja.Wremja2; //(Если предварительно выполнить оператор, то заполнится кэш-память, //результат исказится и совпадет с полученным по щелчку левой кнопкой.) for (i - 0;i<20;i++) for (j - 0;j<20;j++) Test[i][j] - i*j;
//В переменную Wremja2 заносится время суммирования элементов массива при //помощи индексов для чтения его элементов. Start - HightTimeO; for (i - 0:i<20;i++) for (j-0:j<20;j++) Sum +-Test[i][j]; Finish-HightTimeO:
Wremja2-(int)(Finish-Start-SpeedCPU.0ver); //Повторяем измерение времени, используя указатель р на текущий элемент //массива, и заносим время суммирования в переменную Wremja. int *p-&Test[0][0]: Start-Hi ghtTimeO; for (i-0;i<20:i++) for (j«0;j<20:j++) Sum+-*p++; Finish-HightTimeO: