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