Не работает delay pascal

Не работает delay pascal

Procedure Delay(MS : Word);

Режим

Замечания

Параметр MS — число миллисекунд.

Время, на которое процедура Delay задерживает выполнение программы является приближенным значением параметра MS, так что задержка не будет длиться ровно MS миллисекунд.

Например, Delay(1000) не будет задерживать программу ровно на 1 секунду.

Известные проблемы

В фирменных версиях Turbo Pascal на современных компьютерах может возникать ошибка 200: деление на ноль , поэтому популярны патчи, устраняющие эту проблему. Самый популярный патч устраняет ошибку 200 , но при этом создаёт другую проблему: длительность Delay сильно уменьшается, непредсказуемо, причём. Большинство патчей различаются в том, как именно пропатчена процедура Delay. Помимо самого популярного патча есть и другие, увеличивающие разрядность счётчика. Попытка хороша, но работает это только в настоящей однозадачной среде DOS, а в среде Windows использовать на 100% процессор — не нормально, к тому же, процессорное время, выделенное конкретной программе, может отличаться при разной нагрузке.

В School Pak из множества вариантов был выбран такой, который ориентируется только на системное время и при этом пытается разгрузить процессор во время ожидания. Это работает и в NTVDM , и в School Pak . В обычном DOSBox длительность Delay в пропатченных программах не изменяется, но процессор загружен, поэтому специально для School Pak был написан резидент IDLE.COM, разгружающий процессор во время простоев (а это основное состояние интерактивных программ).

Скачать пропатченный CRT.TPU

CRT.TPU обычно находится внутри библиотеки TURBO.TPL. При большом желании вы можете извлекать и помещать обратно модули .TPU с помощью утилиты TPUMOVER. Мы, однако, решили не плодить путаницу и предоставляем для скачивания только TURBO.TPL целиком.

Читайте также:  Как настроить операционную систему ios

См. также

Пример

Язык:
Русский
English

Источник

Pascal

  • местный

  • Группа: Пользователи
  • Сообщений: 17 974

если нужна пауза до нажания кнопки, то цикл until keypressed;

  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
  • местный

  • Группа: Пользователи
  • Сообщений: 17 974
  • наставник

  • Группа: Отключенные
  • Сообщений: 2 804
  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
  • местный

  • Группа: Пользователи
  • Сообщений: 17 974
  • волшебник

  • Группа: Пользователи
  • Сообщений: 617
  • Человек. Просто Человек

  • Группа: Отключенные
  • Сообщений: 894

Просто хороший человек. /В.В.Путин/

О любой проблеме есть два мнения: одно моё, второе ошибочное

  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
QUOTE (Кецалькоатль @ Apr 9 2007, 15:34)
Это глюк паскаля, delay на быстрых процессорах и новых компутерах неправильно работает

..А как он работает?

QUOTE (Sicilla @ Apr 9 2007, 17:14)
я вот не помню, а sleep() там есть?

..Sleep это на бэйсике 🙂

  • Локомотивное депо Пермь-II

  • Группа: Пользователи
  • Сообщений: 886
QUOTE (FuKingBrain @ Apr 9 2007, 19:43)
..А как он работает?

еще на первом пентиуме такой глюк проявлялся. народ делал патченный файлик *.tpu какой то, или патчил скомпиленные exe-шники. но вообще не советую 16-разрядный компилер применять в нынешнее время. 🙂
вообще в дельфи (object pascal как никак) есть и sleep и delay. они устроены по разному и применяются для разных целей. например sleep в длительных циклах для передачи процессорного времени винде. а delay для коротких задержек вне циклов.
🙂

Сообщение отредактировал паровоz: 09.04.2007 — 20:29

  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
  • Agile Coach

  • Группа: Донатор
  • Сообщений: 8 231
QUOTE (паровоz @ Apr 9 2007, 21:05)
еще на первом пентиуме такой глюк проявлялся
  • Локомотивное депо Пермь-II

  • Группа: Пользователи
  • Сообщений: 886
QUOTE (Гуинплен @ Apr 9 2007, 20:19)
Уже не о модуле Crt ли идет речь?
Читайте также:  Как настроить стабильный fps

не помню уже 🙂 более 10 лет назад было. надо фидошку порыть. сам тогда писал на паскале и с появлением пней проги вылетали по error 200 вроде. там какой то свой тестовый таймаут вычислялся и на быстрых процах переполнялось целое значение как то так.

«Проблема модуля Crt. Runtime Error 200 — Divide by 0.
Эта хорошо известная ошибка проявляется на современных компьютерах с достаточно быстрым процессором, настолько быстрым, что в 1992 году, когда выпускался Turbo-Pascal 7.0, о таких еще и не могли предполагать. «

  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
QUOTE (паровоz @ Apr 9 2007, 20:05)
procedure Delay(ms : longint);
<$IFNDEF WIN32>
var
TheTime : LongInt;
<$ENDIF>
begin
<$IFDEF WIN32>
Sleep(ms);
<$ELSE>
TheTime := GetTickCount + ms;
while GetTickCount 0
  • Локомотивное депо Пермь-II

  • Группа: Пользователи
  • Сообщений: 886
  • рядовой пользователь

  • Группа: Пользователи
  • Сообщений: 715
  • рядовой запаса

  • Группа: Пользователи
  • Сообщений: 350

Вот нарыл из старых исходников. Правда эти функции для подсчета времени выполнения участков кода, но на этой основе можно и Delay написать.

QUOTE
var
SysTimer: Longint absolute $0040:$006C;

function GetTickCount: Longint; < в секунде 18.2 тиков >
var
Result: Longint;
begin
Result := SysTimer;
while Result = SysTimer do;
GetTickCount := SysTimer;
end;

function GetTime(Start: Longint): Real; < время от старта в секундах >
begin
GetTime := Abs(SysTimer — Start) / 18.2;
end;

Сообщение отредактировал Long: 10.04.2007 — 10:23

Источник

Оцените статью