Неиспользованное время
Поскольку программа, работающая в среде 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 слишком сложную работу, иначе пользователь Вашей программы будет безуспешно нажимать на клавиши, пытаясь вернуть к жизни «зависшую» программу. Предполагается, что рабочий цикл метода не будет превышать нескольких сотен миллисекунд. Если все-таки Вы хотите выполнить достаточно длинную фоновую задачу, попытайтесь разбить ее на серию мелких шагов.