PASCAL ABC. Модуль Timers

  • docx
  • 11.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-00394.docx

PASCAL ABC.

Модуль Timers


Таймеры позволяют выполнять указанное действие периодически через равные промежутки времени. Процедуры и функции для управления таймерами содержатся в модуле Timers.

Функция CreateTimer(ms,TimerProc) создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc, и возвращает его целочисленный описатель. Созданный таймер сразу же запускается.

Функция CreateTimerExt(ms,TimerProcExt) создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре с одним целочисленнным параметром TimerProcExt, и возвращает его целочисленный описатель. Созданный таймер сразу же запускается. Целочисленный параметр, передаваемый процедуре TimerProcExt, хранит описатель таймера, вызвавшего эту процедуру.

Процедура StartTimer(n) запускает таймер с описателем n.

Процедура StopTimer(n) останавливает таймер с описателем n.

Процедура SetTimerInterval(n,ms) устанавливает  у таймера с описателем n интервал в ms миллисекунд.

Функция TimerInterval(n) возвращает интервал у таймера с описателем n.

Функция TimerEnabled(n) возвращает True, если таймер запущен, и False в противном случае.

Процедура DestroyTimer(n) разрушает таймер с описателем n.


Модуль
Timers содержит также класс Timer, имеющий следующий интефейс:

type
  Timer=class
    constructor Create(ms: integer; TimerProc: procedure);
    destructor Destroy;
    procedure Start;
    procedure Stop;
    property Enabled: boolean;
    property Interval: integer;
    function Handle: integer;
  end;
 

Конструкторы и деструкторы

constructor Create(ms: integer; TimerProc: procedure);

Создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc. Созданный таймер сразу же запускается.

constructor Create(ms: integer; TimerProc: procedure);

Создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре с одним целочисленнным параметром TimerProc. Созданный таймер сразу же запускается. Целочисленный параметр, передаваемый процедуре TimerProcExt, хранит описатель таймера, вызвавшего эту процедуру.

destructor Destroy;

Разрушает объект и содержащийся в нем таймер.
 

Свойства

property Enabled: boolean;

Запущен ли таймер. Присваивание Enabled=False эквивалентно вызову Stop, а присваивание Enabled=True - вызову Start.
 

Методы

procedure Start;

Запускает таймер.

procedure Stop;

Останавливаетает таймер.

function Handle: integer;

Возвращает описатель таймера.
 

Таймеры удобнее рассматривать как объекты класса Timer, в котором собраны все основные действия с таймерами. Такой подход является более удобным и современным, чем подход с описателями таймеров. Единственный его недостаток - необходимость вводить основные понятия, связанные с классами. Подход с описателями позволяет работать с таймерами сразу после рассмотрения темы "Процедуры и функции".

Пример 1

Вариант с описателем таймера

uses Timers,Events;

procedure TimerProc;
begin
  write(1);
end;

var t: integer;
begin

  t:=CreateTimer(200,TimerProc);
end.

Вариант с классом Timer

uses Timers,Events;

procedure TimerProc;
begin
  write(1);
end;

var t: Timer;
begin

  t:=Timer.Create(200,TimerProc);
end.

Для периодического вызова процедуры таймера необходимо после его создания продолжить выполнение приложения. Это можно сделать либо поместив в конце основной программы бесконечный цикл, либо сделав приложение событийным, подключив модуль Events.

Пример 2

Вариант с описателем таймера

uses Timers, Events;

var t1,t2: integer;
procedure
TimerProcExt(n: integer);
begin
  if n=t1 then
    write(1,' ')
  else write(2,' ');
end
;

begin
  t1:=CreateTimerExt(200,TimerProcExt);
  t2:=CreateTimerExt(300,TimerProcExt);
end.

Вариант с классом Timer

uses Timers, Events;

var t1,t2: Timer;
procedure
TimerProcExt(n: integer);
begin
  if n=t1.Handle then
    write(1,' ')
  else write(2,' ');
end
;

begin
  t1:=Timer.Create(200,TimerProcExt);
  t2:=Timer.Create(300,TimerProcExt);
end.