Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   ЧАВО - Частые Вопросы и Ответы    >>    fdelay
   
 
 CRT. Как бороться с Delay()   Sly Golovanov 27.12.1997

Как написать свою процедуру задержки, чтобы избежать глюков, присущих стандартной процедуре DELAY().


 
 

Pascal FAQ created by SLY Golovanov, 2:5020/278.13 (slightly corrected by Valery Votintsev 2:5021/22) ============================================================================== Q:> А почему задержки, которые задаются процедурой Delay(),на разных машинах разные? A: Юнит CRT криво написан. Q:> А чем тогда делать фиксированную задержку, вместо Delay()? A: Если достаточна точность в 1 тик (1/18 доля секунды), то так: Procedure Delay(x:longint); {пауза на Х тиков} var l:longint; begin l := MemL[Seg0040:$6c]; while MemL[Seg0040:$6c] < l+x do; {задержка на X тиков} end; Если нужно точнее, то надо читать регистры таймера... Вот вам другая процедура: procedure RTCDelay(Wait:LongInt); assembler; {Ожидание на Wait микросекунд } asm mov ah,86h mov dx,word ptr Wait mov cx,word ptr Wait+2 int 15h end; Wait - в *микро*секундах, но разрешение все равно с точностью до ~976 микросекунд (примерно 1 миллисекунда), т.е. меньше 1024 ставить просто бессмысленно. --- * Origin: (2:5020/794.13)