Листинг 4.5

typedef struct _RdTSC {

double Speed; //Тактовая частота в мегагерцах.

int Over; //Накладные расходы в тактах на засечку времени.

char ss[110]; //Текст заголовка окна с информацией о тактовой частоте. } RdTSC; RdTSC SpeedCPU; Задания для самостоятельного выполнения Поля этой структуры будут заполняться процедурой, которая определяет количество импульсов тактовой частоты, поступивших за фиксированный интервал времени Tick, а также выводит значение частоты в заголовок окна.

Для отсчета интервала Tick можно использовать функцию GetTickCountC) или timeGetTimeC). Справочная система сообщает, что обе они возвращают время в миллисекундах, прошедшее с момента пуска системы. Чтобы выбрать подходящую функцию, надо протестировать их и проверить дискретность результата. Для этого можно использовать довольно простой фрагмент кода:

TimeO - GetTickCountC):
while( (Time - GetTickCountC)) - TimeO < 1);

Когда-то на компьютере с системой Windows 95 получилось, что Time - TimeO = 5, то есть показания, возвращаемые функцией GetTi ckCount С), изменялись с дискретностью 5 мс. А тот же опыт с timeGetTimeC) показал, что эта функция изменяет показания каждую миллисекунду. Потом я много раз повторял этот тест с другими системами, и разницы нигде не было. Но до сих пор я по привычке применяю timeGetTimeC). Именно она используется в функции, которая позволяет измерить производительность системы, как это показано в листинге 4.6.

Листинг 4.6

RdTSC Calibrate (int Tick.HWND hwnd-NULL) {
RdTSC Res:
_int64 Start.Finish:
int dwStartO.dwStart. Temp;
char s[85];

//Определяем накладные расходы на фиксацию начала и конца интервала. dwStart - timeGetTimeC): //Начало интервала в миллисекундах. Start - HightTimeO: //Начало интервала в тактах процессора. whileCtimeGetTimeC) - dwStart < 0); //Интервал нулевой длительности. Finish - HightTimeO: //Конец интервала в тактах процессора. Temp-(int)CFinish-Start); //Накладные затраты времени в тактах процессора. //Определяем количество тактов процессора в интервале Tick. dwStartO = timeGetTimeC);


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