Оператор
Оператор SLEEP
Готовый результат нужно успеть рассмотреть, а интерактивный цикл — не занимать процессор вхолостую. Оператор SLEEP приостанавливает программу на заданное время или до нажатия клавиши; выбор формы зависит от того, нужна ли фиксированная пауза или ожидание ввода.
Две формы ожидания
Числовой аргумент задаёт задержку в миллисекундах. Вызов без аргумента ждёт любую клавишу и удаляет её из очереди ввода. Это разные формы, а не одно и то же действие с разными параметрами: первая только ожидает время, вторая извлекает клавишу.
Оба режима доступны в консоли, текстовом и графическом окне. Оператор не требует предварительного вызова SCREEN.
Синтаксис
SLEEP
SLEEP <миллисекунды>
Аргумент длительности
Выражение milliseconds приводится к LONG и должно лежать в 0..2147483647 миллисекунд включительно. При пропуске аргумента используется ожидание клавиши, а не нулевая задержка.
SLEEP является оператором, а не функцией, поэтому внутри выражения его использовать нельзя.
Точность паузы и очередь клавиатуры
SLEEP 0допустим и сразу возвращает управление программе.SLEEP 500делает паузу примерно на 500 миллисекунд. Фактическая точность зависит от планировщика операционной системы.SLEEPбез аргумента удаляет первую доступную клавишу из очереди, поэтому следующий вызовINKEY()илиKEYPRESS(...)уже не увидит именно это событие.
Обработчики во время ожидания
Во время ожидания SLEEP не вызывает обработчики ON KEY и ON MOUSE; они получают управление на границах инструкций после завершения ожидания. Остановка программы может прервать ожидание. Для наблюдения за событиями используется цикл с короткими задержками.
Диагностика
Отрицательная или слишком большая длительность сообщает диагностику времени выполнения MB3007.
Пример задержки и ожидания клавиши
PRINT "Пауза 500 мс..."
SLEEP 500
PRINT "Нажмите любую клавишу."
SLEEP
PRINT "Готово"
Первая пауза отсчитывает время и не трогает очередь ввода, поэтому нажатие во время неё остаётся доступным. Вторая форма ждёт клавишу и забирает её, после чего выполняется последний PRINT.