2013-09-26 2 views
1

Я интенсивно загружаю, но нашел только подсказки для ожидания в пакетных файлах в секундах (подход ping i.e.).Милисекунды (!) Ждут в пакетном режиме без внешних ссылок?

Поскольку у меня есть необходимость ждать между двумя командами только для чего-то вроде 10-100 миллисекунд, это не работает для меня, к сожалению.

Время ожидания не должно быть «супер точным». В моем случае это не имеет большого значения, если оно составляет 10 мс или 12/15 мс, но оно должно иметь возможность различать 10 и, скажем, 20.

Я нашел, если есть решение, и если это возможно , используя только команды «на борту» на окнах, так как я хочу иметь только пакет для удобства «установки» при использовании позже на другой машине.

+0

Я не думаю, что его можно с разрешением менее 100 мс. Попробуйте: @echo off: loop echo% time% goto loop' (извините, в комментариях нет перевода строки, но я думаю, вы знаете, где их устанавливать). Вы видите, что даже вторая цифра (10 мс) после запятой не считается последовательной? (Кстати: от 60 до 70 из этих эхо дает вам «около» 100 мс, что НЕ означает, что 6-7 даст около 10 мс ...) – Stephan

ответ

3
@echo off 

echo Time before: %time% 
echo Wait %1 centiseconds (or more) 
call :wait %1 
echo Time after: %time% 
goto :EOF 

:wait centiseconds 
for /F "tokens=3,4 delims=:." %%a in ("%time%") do set /A sec=1%%a, msec=1%%b+%1 
if %msec% gtr 199 set /A sec+=1, msec-=100 
set lim=%sec%%msec% 
:waitHere 
for /F "tokens=3,4 delims=:." %%a in ("%time%") do if 1%%a1%%b lss %lim% goto waitHere 
exit /B 

Минимальное точное время ожидания полностью не зависит от скорости компьютера. Например, в моем случае время ожидания менее 5 сантисекунд всегда ждет больше времени. Если я использую время ожидания от 5 сантисекунд, время будет точным.

EDIT: Я немного изменил программу, чтобы уточнить ее с небольшим временем ожидания, теперь он точен на моем компьютере с 3 сантиметров!

Следует отметить, что минимальное точное время ожидания также зависит от размера пакетного файла; если файл большой, минимальное точное время увеличивается ...

+0

+3 сссекунды/-0 сантисекунд. Лучше, чем ожидалось... – Stephan

0

Вы можете использовать переменную% time% и рассчитать разницу.
В псевдокоде это выглядит так.

set startTime=%time% 

:wait 
set now=%time% 
if now-startTime < waitTime goto wait 

Btw извне программа не будет работать здесь, как погрузка/время начала не предсказуема и может быть гораздо больше в качестве WaitTime.

+0

будет экспериментировать с ответами. Спасибо всем! – jwka

0

это может сделать, что вы хотите:

@echo off 
echo %time% 
for /L %%i in (1,1,50) do (echo %time%)>nul 
echo %time% 

, например, три последовательных пробеги:

C:\>t 
12:15:20,74 
12:15:20,75 

C:\>t 
12:15:21,22 
12:15:21,22 

C:\>t 
12:15:21,69 
12:15:21,71 

Как вы видите, первый прогон дает «о» 10мс, второй прогон дает вы «около» 0 мс, третий дает вам «около» 20 мс. Ничего надежного ...

кстати: если заменить echo %time% с echo time это становится все хуже ...

+0

Спасибо! Хорошая информация .. попробуй! – jwka

+0

(1,1,300) сделает вещи более надежными: 50 ... 80 мс – Stephan

Смежные вопросы