18.4.1. TTimer - таймер

Компонент TTimer (таймер) служит для отсчета интервалов реального времени. Его свойство interval определяет интервал времени в миллисекундах, который должен пройти от включения таймера до наступления события onTimer. Таймер включается при установке значения True в его свойство Enabled. Раз включенный таймер все время будет возбуждать события onTimer до тех пор, пока его свойство Enabled не примет значения False.

Следует учесть, что в силу специфики реализации аппаратного таймера персонального IBM-совместимого компьютера минимальный реально достижимый интервал отсчета времени не может быть меньше 55 миллисекунд (этот интервал называется тиком). Более того, любой интервал времени, отсчитываемый с помощью таймера, всегда кратен 55 миллисекундам. Чтобы убедиться в этом, проделайте следующий эксперимент, в котором подсчитывается среднее время между двумя срабатываниями таймера:

- Положите на пустую форму компонент TTimer. Установите в его свойство interval любое число в диапазоне от 1 до 55 включительно.
- Напишите такой обработчик события onTimer:

var

BegTime: TDateTime;

procedure TForm1.Timer1Timer(Sender: TObject);

var

h, m, s, ms: Word;// Переменные для декодирования времени

const

MaxTick = 10; // Количество интервалов таймера

begin

if Tag = 0 then

BegTime := Time; // Запоминаем начальное время

Tag := Tag + 1; // Наращиваем счетчик тиков

if Tag = MaxTick then

begin

Timeri.Enabled := False; // Выключаем таймер

// Декодируем значение 1 тика

DecodeTime((Time-BegTime)/MaxTick, h, m, s, ms);

// Выводим результат в заголовке окна:

Caption := IntToStr(s) + ' s ' + IntToStr(ms) + ' ms'

end

end;

Обратите внимание на определение глобальной переменной BegTime в области видимости процедуры TimerlTimer. Необходимость нескольких (MaxTick) срабатываний для точного усреднения результата связана с тем, что системные часы также обновляются каждые 55 мс. После запуска программы в заголовке окна вы увидите строку

О s 55 ms ,

в которой указывается, сколько реального времени разделяет два соседних события OnTimer. Этот результат повторится для любых значений константы MaxTick. Если вы установите Interval таймера в диапазоне от 56 до 110 миллисекунд, в заголовке будет указано 110 ms И Т. Д.