PDA

Показать полную графическую версию : [решено] Программа должна уснуть на заданное количество секунд.


anoxina
13-12-2015, 10:32
Программа засыпает на заданное количество секунд:
@echo off
set /a x=%1
set tim=%time%

for /f "tokens=1,2,3 delims=:" %%a in ("%tim%") do set /a st=(%%a*60+%%b)*60+%%c 2> nul


:cycle

set tim=%time%
for /f "tokens=1,2,3 delims=:" %%a in ("%tim%") do set /a ct=(%%a*60+%%b)*60+%%c 2> nul

set /a dt=%ct%-%st% 2> nul

if /i %dt% leq %x% goto :cycle
goto :eof

Проблема кода в том что при переходе времени до полуночи? т. е. 00:00:00 программа переходит в вечный цикл , как это исправить ?
Еще не должно выводить ошибку про восьмеричную систему, т.е. когда пишешь 08 считало как 8 секунд
В данной задаче нельзя использовать команду ping и timeout

Iska
13-12-2015, 11:20
anoxina, таким циклом Вы даёте 100% нагрузку на одно из реальных/виртуальных ядер процессора. Не делайте так. См. Пауза в пакетном файле (http://www.oszone.net/6160):
>nul ping.exe -n %~1 127.0.0.1

anoxina
13-12-2015, 14:34
Нельзя использовать команду ping.

Iska
13-12-2015, 15:47
В данной задаче нельзя использовать команду ping. »
Просмотрел :). Поясните, почему нельзя?

В новых ОС есть ещё «timeout»:
>nul timeout.exe /t %~1 /nobreak

anoxina
13-12-2015, 19:08
Такая цель задачи, timeout тоже использовать нельзя

Foreigner
13-12-2015, 20:28
@echo off
setlocal

set "timeout=10"
set "t1=%time:~0,-3%"

echo %t1%

:1

set "t2=%time:~0,-3%"

if %t1% equ %t2% (goto:1) else (

set /a timeout-=1
set "t1=%t2%"

)

if %timeout% neq 0 goto:1
echo %time:~0,-3%

anoxina
13-12-2015, 22:08
Foreigner, Когда пишешь 08 и 09 программа не работает, а уходит в вечный цикл, как это исправить?

anoxina
13-12-2015, 22:55
Проблему исправила

:1
set "t2=%time:~0,-3%"
if %t1% equ %t2% (goto:1) else (
set /a timeout-=1
set "t1=%t2%" »
Объясните как работает этот фрагмент

Foreigner
13-12-2015, 23:00
anoxina,

@echo off
setlocal

set "timeout=09"
2>nul set /a %timeout% || echo Enter valid integer && goto:eof
...

anoxina
14-12-2015, 05:44
:1
set "t2=%time:~0,-3%"
if %t1% equ %t2% (goto:1) else (
set /a timeout-=1
set "t1=%t2%" »
Объясните как работает этот фрагмент

anoxina
14-12-2015, 08:09
А если ввожу 091 081 уже не работает , как это исправить?

Foreigner
14-12-2015, 11:51
Не понятен смысл. Зачем это надо? Уберите лидирующий ноль(нули) и все будет нормально:

@echo off
setlocal

set "timeout=009"
set "t1=%time:~0,-3%"

:0
if %timeout:~0,1% equ 0 set timeout=%timeout:~1% && goto:0

echo %t1%
...




© OSzone.net 2001-2012