Как сделать задержку в программе
Задержку задают в миллисекундах: 1000 мс — одна секунда.
Пауза: Sleep
Процедура Sleep есть в обеих средах, но подключается по-разному.
PascalABC.NETподключать ничего не нужно
program Countdown;
var
i: integer;
begin
for i := 3 downto 1 do
begin
writeln(i);
Sleep(1000);
end;
writeln('Старт!');
end.3
2
1
Старт!Строку uses sysutils; здесь не пишите: такого модуля в PascalABC.NET нет, а Sleep работает и без него.
Free Pascalsleep из модуля sysutils
program Countdown;
uses sysutils;
var
i: integer;
begin
for i := 3 downto 1 do
begin
writeln(i);
sleep(1000);
end;
writeln('Старт!');
end.3
2
1
Старт!Числа появляются с паузой в секунду.
delay из модуля crt
В старых учебниках по Turbo Pascal задержку делают процедурой delay из модуля crt: после заголовка программы пишут uses crt;, а в нужном месте — delay(500);. Так можно и в Free Pascal, и в PascalABC.NET.
Но в PascalABC.NET программа с uses crt не запускается обычным F9: среда напишет, что такую программу нужно запускать клавишами Shift+F9, — тогда она откроется в отдельном окне консоли. Если crt нужен только ради задержки, проще взять Sleep.
Ждать нажатия Enter
Иногда нужна не пауза по времени, а «нажмите Enter, чтобы продолжить». Для этого хватит readln без параметров — он ждёт, пока человек нажмёт Enter:
writeln('Нажмите Enter, чтобы продолжить');
readln;Так же задерживают окно программы, которое иначе сразу закрывается, — см. справку Окно программы сразу закрывается.
Подводные камни
- Задержка в секундах.
Sleep(5)— это 5 миллисекунд, то есть почти ничего. Пять секунд —Sleep(5000). - Программа «зависла». Во время
Sleepпрограмма ничего не делает и не отвечает на клавиши — это нормально. Большие значения вродеSleep(600000)(10 минут) легко принять за зависание. - Точность. Задержка примерно равна указанной, а не до миллисекунды: для учебных программ этого хватает, но точно измерять время так нельзя.