Delay не работает паскаль

Delay не работает паскаль

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 целиком.

См. также

Пример

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

Источник

Delay не работает паскаль

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 целиком.

См. также

Пример

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

Источник

Конфликт модулей crt и GraphABC

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Два окна uses crt и graphABC
При применении двух модулей crt и graphABC, после компиляции программы, появляются два окна. Можно.

Переход между модулями graphabc и crt
Есть программа для подсчета определенного интеграла, в которой ввод данных осуществляется с помощью.

Как совместить окна CRT и GraphABC?
Здравствуйте. Я пишу плеер. У меня есть проблема с кодом который я написал в Pascal ABC и переношу.

Как переключаться между модулями CRT и GraphABC
У меня есть тестовое приложение, которое написанно на GraphABC и CRT. Оно скачивает файл из.

Сам спросил — сам ответил.

Добавлено через 2 минуты
Если всё таки без Crt что-то не работает, то перепишите код без Crt или скиньте код.

Так. Знаю, что надо запускать через Shift+F9, об этом даже сам компилятор пишет.
Ваша программа у меня тоже работает, а вот моя — нет. Точнее она выполняется, и через 5-10 секунд завершается, при этом ни окна GraphABC, ни консоли программа не открывает.
Sleep подходит. Он чем-то отличается от Delay? Я о нём даже и не знал, везде delay используют.

Сам спросил — сам ответил.

Добавлено через 2 минуты
Если всё таки без Crt что-то не работает, то перепишите код без Crt или скиньте код.

Читайте также:  Не работает кнопка полноэкранного режима

Вот полный код, который у меня компилируется без проблем. Вообще, по-моему мнению, его очень трудно понять, ну если что, могу ответить на вопросы. Некоторые строчки прокомментировал.

Вообще, я делал симулятор вот этого.

Программа требует 2 текстовых файла. Я их прикрепил. Их можно изменять, тоже всё работает.

Вложения

preset.txt (6.0 Кб, 39 просмотров)
Settings.txt (236 байт, 42 просмотров)

Добавлено через 2 минуты
круто))) а чтобы случайное заполнение было в начале, и задержка по-больше. крутая заставочка получается)))

Добавлено через 8 минут
странно, изменяю пресет и прога останавливается раньше чем должна, а если убираю его, то вовсе все клетки пустые(((

По поводу изменения пресета, там надо аккуратно. Вообще его менять не очень удобно, хочу сделать создание пресетов через GUI, чтобы он рисовал сетку, а ты тыкал на клеточки, где нужно добавить жизнь. И в конце всё это сохранять в txt, который уже будет использовать основная программа.
Ну, это позже.

Добавлено через 24 секунды
А вот версия по твоему запросу.

Тут нужен только файл settings. Он изменён, поэтому прилагаю к сообщению.

Вот тут с настройками аккуратно. В той версии у нас был только один глайдер, и даже если рисовать поле 650 на 300, тормозит не сильно. Тут на первых порах создаётся много живых клеток и пока большинство не умрёт (а большинство всегда умирает), будет некрасиво отрисовываться полинейно.

Я отрегулировал настройки, чтобы это торможение было минимальным, но коэффициент можно ставить и 0.8, например, тогда почти все клетки будут живыми. Поле тоже можно расширять, но именно расширение поля порождает лаги. Моя эмуляция пока слабо оптимизирована, т. к. никогда не запускал больше одного глайдера на поле.
Потом возможно сделаю что-нибудь с этим.

Источник

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 ли идет речь?

не помню уже 🙂 более 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

Источник

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