Неиспользованное время

Поскольку программа, работающая в среде Turbo Vision, рассчитана на диалог с пользователем, в ней всегда найдутся такие промежутки времени, в течение которых она просто пассивно ожидает действий пользователя. Turbo Vision предоставляет Вам удобное средство, позволяющее в этот момент загрузить процессор не слишком долгой, но нужной для Вас работой.

Стандартный метод TView.GetEvent построен таким образом, что если нет никаких событий, он обращается к псевдоабстрактному методу TView.Idle. По умолчанию TView.Idle ничего не делает, он просто возвращает управление методу GetEvent, заставляя его непрерывно сканировать клавиатуру и мышь. Вы можете перекрыть TView.Idle, чтобы выполнить нужные действия.

В следующем примере каждые 5 сек в правый верхний угол экрана выводится системное время. Для упрощения программы вывод осуществляется стандартными средствами Турбо Паскаля.

Uses DOS,CRT,App; 

type

TProg = object (TApplication)

Procedure Idle; Virtual; 

end;

Procedure TProg.Idle; 

const

old: Byte = 0; {Старое значение секунд} 

dt = 5; {Шаг вывода} 

var

ho,mi,se,s100: Word; Function TimeStr(k: Word): String; 

var

s: String [2]; 

begin

str(k,s);

if k < 10 then

s := '0'+s; 

TimeStr := s 

end; {TimeStr} 

begin {TProg.Idle}

GetTime(ho,mi,se,s100); 

if (se mod dt = 0) and (old <> se) then 

begin

Old := Se; T

extColor(Black) ; 

TextBackGround(White); 

GotoXY(72,1);

Write(TimeStr(ho)+ ':'+TimeStr(mi) + ':'+TimeStr(se)) 

end

end; {TProg.Idle} 

var

Prog:TProg; 

begin

Prog.Init; 

Prog.Run; 

Prog.Done 

end.

Разумеется, не следует поручать методу TView.Idle слишком сложную работу, иначе пользователь Вашей программы будет безуспешно нажимать на клавиши, пытаясь вернуть к жизни «зависшую» программу. Предполагается, что рабочий цикл метода не будет превышать нескольких сотен миллисекунд. Если все-таки Вы хотите выполнить достаточно длинную фоновую задачу, попытайтесь разбить ее на серию мелких шагов.