Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиПА / include / syst 2009.doc
Скачиваний:
11
Добавлен:
07.02.2016
Размер:
95.74 Кб
Скачать

7. Измерение времени

void runtimer();

float timer();

Эта пара функций обслуживает таймер, который может использоваться для измерения промежутков времени. Процедура runtimer осуществляет сброс и пуск таймера. Функция timer возвращает текущее значение таймера в секундах. Точность измерения времени определяется частотой прерываний, которые генерируются системным таймером компьютера. Получить значение этой частоты можно, прочитав системную переменную CLK_TCK .

Пример использования функций таймера:

#include <syst.h>

void main()

{ float t;

runtimer();

printr("Сделайте паузу и нажмите ENTER\n");

pause;

t=timer();

printf("timer = %5.2f sec \n",t);

}

Разрешающая способность указанных таймеров составляет примерно 0.05 с. Отсюда следует, что для измерения времени с точностью 1%, измеряемый промежуток времени должен превышать 5 с.

Функции микросекундного таймера имеют намного лучшее разрешение, равное 1 мкс (0.000001 с.), однако использование этих функций имеет ряд особенностей.

1. В системной папке ..\BIN должен присутствовать ассеблерный компилятор tasm32.exe.

2. При использовании BORLAND C++ 5.01 необходимо активировать компилятор BORLAND (не Intel !).

3. В самом начале компилируемой программы должно быть записано определение

#define _STIMER_

разрешающее компиляцию функций и определений микросекундного таймера.

4. Для получения абсолютных значений измеряемого интервала времени необходимо установить правильное значение системной переменной CPU_Frequency. Сделать это можно либо вручную, подправив соответствующую строку в начале файла syst.h, либо использовать процедуру set_cpu_fr(), которая сделает это сама.

5. Правила выбора имени исходного файла должны соответствовать также и правилам этого компилятора. В частности, имя компилируемого файла не должно начинаться с цифры.

Ниже приведено описание основных функций микросекундного таймера.

void runstimer();

Инициализация микросекундного таймера.

ulong mcstimer()

Текущее значение таймера в микросекундах.

double stimer();

Текущее значение таймера, представленное как число тактов процессора в формате double.

void set_cpu_fr();

Эта процедура определяет тактовую частоту используемого процессора и устанавливает соответствующее значение системной переменной CPU_Frequency. Время измерения тактовой составляет примерно 10 с, относительная погрешность измерения равна 0.025% .

Функции микросекундного таймера используют специальный регистр процессора TSC (счетчик тактов процессора). Об идее использования этого регистра для построения программного таймера можно прочитать в [6].

8. Парный обмен, сортировка, поиск, текущие время и дата

void swp(Type& a, Type& b);

Процедура парного обмена: переменные a,b меняются значениями. Помимо процедуры swp с шаблоном, предусмотрена специальная реализация процедуры для парного обмена asciiz-строк символов:

void swp(char* s1, char* s2);

При использовании этой процедуры необходимо позаботиться о том, чтобы массивы, представленные указателями s1 и s2 имели размеры, достаточные для выполнения операции обмена.

void sortup(int i, int k, Type* p);

Сортировка отрезка [i .. k] массива p по возрастанию.

void sortdown(int i, int k, Type* p);

Сортировка отрезка [i .. k] массива p по убыванию.

int b_find(Type* A, int n, const type& key)

Поиск в массиве A размером n по ключу key. Используется алгоритм бинарного поиска.

char* rdate();

char* rtime();

Эта пара функций возвращает указатель на строку, которая представляет текущие дату и время в украинском формате и в компактной форме.

Соседние файлы в папке include