Ожидание заданного интервала времени

Ожидание заданного интервала времени

Рассмотрим основные варианты организации ожидания ( паузы ) в bat / cmd файлах.

Для решения этой задачи в операционных системах, начиная с VISTA, присутствует команда timeout. Так, для ожидания 10 секунд следует выполнить команду.

TIMEOUT /T 10 /NOBREAK


Если не использовать параметр /NOBREAK, то ожидание может быть прервано нажатием любой клавиши.

Поскольку эта задача вставала перед разработчиками задолго до появления этой утилиты, те, у которых операционная система младше, могут воспользоваться накопившемся опытом.
Для организации паузы есть специальная утилита, входящая в состав Resource Kit (Ресурскита).
Пакеты Microsoft Windows Deployment Kit и Windows Resource Kit бесплатно распространяется microsoft.com. Этот пакет содержит ряд полезных и...как бы так сказать... других утилит.


sleep время_в_секундах

Если вы уже устали бродить по бескрайним просторам сайта microsoft.com, постоянно возвращаясь на одни и те же страницы, то можете скачать эту утилиту здесь

Как и во многих других случаях, может помочь утилита nircmd.
(На момент написания страницы описание возможностей утилиты было здесь. C этим списком я рекомендую ознакомится, даже если для текущей задачи будет использовано другое решение.)


start /w nircmd wait [milliseconds]


На просторах интернета можно найти утилиту wait.exe. Точнее, даже несколько разных, включая исходные тексты программы. Поэтому я не привожу здесь параметров вызова, смотрите их описание.

Для организации паузы можно использовать утилиты, ожидающих определенное событие заданное время.
При условии, что событие не наступит, получается ожидание требуемого интервала времени.
Так, паузу можно создать при помощи команды ping:


ping -n 1 -w 100000 10.10.254.254 >nul

-n 1 - выполнить один запрос
-w 100000 - ждать ответа 100 секунд
(значение указывается в миллисекундах)
10.10.254.254 - IP адрес, который заведомо не существует в локальной сети (важно!), следовательно, никогда не ответит на ping т. е. событие не наступит.
>nul - перенаправление всего вывода команды ping в никуда.

Еще одно решение - посылать пинг на заведомо существующий адрес - т. е. самому себе. Количество посылаемых пакетов должно быть на единицу больше количества ожидаемых секунд. Так, для ожидания 5 секунд следует выполнить команду:


ping -n 6 127.0.0.1 >nul


В том же пакете Ресурскит есть утилита choice, которую при известной доле извращенности можно использовать для тех же целей:

choice /N /T:y,%сек% > nul


Для любителей экзотики.
Можно вычислить время окончания интервала ожидания и занять чем-то несчастный процессор до наступления этого события. Как результат - пауза организована только средствами bat / cmd.
Привожу слегка исправленный пример, взятый с сайта http://www.oszone.net.

@echo off :: Пример использования:: Некоторые действия echo Сейчас %time:~0,-3% :: пауза на 15 секунд call :sleep 15 :: Другие действия echo Сейчас %time:~0,-3% pause goto :EOF :sleep echo Пауза на %1 секунд... set /a ftime=100%time:~6,-3%%%100+%1 if %ftime% GEQ 60 set /a ftime-=60 :loop set ctime=%time:~6,-3% if /i %ftime% NEQ %ctime% goto :loop exit /b 0
Данная процедура позволит организовать задержку в выполнении. Время ожидания должно быть меньше 60 сек.




Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).






  TopList Rambler Top100 own counter Valid XHTML 1.0 Strict Valid CSS Rambler Top100

Фитотерапия Молитвы Водолечение Юмор Форум Кладовка link О авторе

Фитотерапия Молитвы Водолечение Юмор Форум Кладовка Ссылки О авторе Отправить сообщение Карта сайта Поиск по сайту Главная страница

Copyright © 1999 - 2017  Бронислав Краснер