Что нового

Работа скрипта в указанное время.

Maria

Новичок
Сообщения
29
Репутация
0
Добрый день.

Мне нужно, что бы скрипт работал в определённый период времени.
Скажу сразу, хочу обойтись без планировщиков.

Допустим есть скрипт.
В нём цикл.

Код:
$c=0
while 1 
tooltip($c,100,100)
sleep(1000)
$c=$c+1
wend


Мне нужно, что бы цикл выполнялся только в это время.
С 07:27 до 07:37
С 10:27 до 10:37
С 13:27 до 13:37
С 16:27 до 16:37
С 19:27 до 19:37
С 22:27 до 22:37
С 01:27 до 01:37
С 04:27 до 04:37
С 06:27 до 06:37

На сколько я понимаю, скрипт будет нагружать память, если не будет задержки в проверке времени, поэтому сделайте проверку, раз в 1 секунду.
Так как периодов времени много итд. Сделайте пожалуйста отдельную строку, где я бы могла отключать их разом. Ну что то вроде если 0 то выкл, если 1 то вкл (не графически, просто в скрипте)

Буду очень ждать Вашей помощи.
 

IMStrelcov

CTPEJIbLLOB
Сообщения
205
Репутация
40
Код:
;переменная содержащая время работы скрипта
;            с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до
$sTimes = '07:27-07:37,10:27-10:37,13:27-13:37,16:27-16:37,19:27-19:37,22:27-22:37,01:27-01:37,04:27-04:37,06:27-06:37'
;создаем массив с временем
$aTimes = StringSplit($sTimes, '-,')

;ваша переменная
$c=0

;цикл с задержкой между вызовами в 1 сек.
while sleep(1000)
   ;строку ниже можно удалить, она для теста.
   ConsoleWrite(@HOUR&':'&@MIN&' - '&CheckTimes_()&@CRLF);эту строку можно удалить, она для теста.
   ;проверяем время
   If CheckTimes_() Then
      ;ваш код, который следует выполнить
      tooltip($c,100,100)
      $c=$c+1
   EndIf
wend

;проверяет текущее системное время с интервалами указанными в $sTimes/$aTimes
;если системное время попадает в один из указанных интервалов,
;то вернет True, иначе False
Func CheckTimes_()
   Local $_iA, $_sTime = @HOUR&':'&@MIN
   For $_iA = 1 To $aTimes[0] Step 2
      If ($_sTime >= $aTimes[$_iA]) Then
         If ($aTimes[0] > $_iA) And ($aTimes[$_iA+1] > $_sTime) Then Return True
      EndIf
   Next
   Return False
EndFunc
 
Автор
M

Maria

Новичок
Сообщения
29
Репутация
0
Код:
;переменная содержащая время работы скрипта
;            с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до,    с    -    до
$sTimes = '07:27-07:37,10:27-10:37,13:27-13:37,16:27-16:37,19:27-19:37,22:27-22:37,01:27-01:37,04:27-04:37,06:27-06:37'
;создаем массив с временем
$aTimes = StringSplit($sTimes, '-,')

;ваша переменная
$c=0

;цикл с задержкой между вызовами в 1 сек.
while sleep(1000)
   ;строку ниже можно удалить, она для теста.
   ConsoleWrite(@HOUR&':'&@MIN&' - '&CheckTimes_()&@CRLF);эту строку можно удалить, она для теста.
   ;проверяем время
   If CheckTimes_() Then
      ;ваш код, который следует выполнить
      tooltip($c,100,100)
      $c=$c+1
   EndIf
wend

;проверяет текущее системное время с интервалами указанными в $sTimes/$aTimes
;если системное время попадает в один из указанных интервалов,
;то вернет True, иначе False
Func CheckTimes_()
   Local $_iA, $_sTime = @HOUR&':'&@MIN
   For $_iA = 1 To $aTimes[0] Step 2
      If ($_sTime >= $aTimes[$_iA]) Then
         If ($aTimes[0] > $_iA) And ($aTimes[$_iA+1] > $_sTime) Then Return True
      EndIf
   Next
   Return False
EndFunc
Гениально )))
Как раз то что нужно. Всё работает, благодарю!)
 
Верх