Author Topic: Многоярусное условие  (Read 1771 times)

0 Members and 1 Guest are viewing this topic.

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Многоярусное условие
« on: May 07, 2015, 09:29:09 PM »
Несколько раз в сутки требуется запускать одну подпрограмму в определенное время

На скорую руку набросал так
Code: (clickermann) [Select]
SUB(tak)
// куча кода
$p = 2 // после выполнения изменяем переменную
END_SUB

// это кусок кода из бесконечного цикла
IF(($_time_h = 6) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 14) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 22) & ($_time_m > 0) & ($_time_m < 20) & ($p < 2))
   tak()
END_IF
IF(($_time_h = 7) ^ ($_time_h = 15) ^ ($_time_h = 23))
   $p = 0
END_IF


Сейчас захотелось оптимизировать, ибо слишком глупо и громоздко
Сделал так

Code: (clickermann) [Select]
// при запуске скрипта в самом начале добавил переменную
$p = 0
// чтобы при первом запуске отработало

IF((($_time_h = 6) ^ ($_time_h = 14) ^ ($_time_h = 22)) & ($p = 0))
   tak()
END_IF
IF(($_time_h ! 6) & ($_time_h ! 14) & ($_time_h ! 22))
   $p = 0
END_IF

Работает только если запускаю непосредственно в нужные часы, т.е. замечаю что нифига не отрабатывает, выключаю скрипт, включаю - выполнилось. Если скрипт запускаю в 23 и иду спать, то утром вижу, что в 6 нифига не отработало, хотя все остальное выполняется. Может я чего-то недопонимаю и не так написал?
Помогите разобраться )
« Last Edit: May 07, 2015, 09:49:57 PM by Kedrick »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Многоярусное условие
« Reply #1 on: May 08, 2015, 07:21:19 AM »
Тебе нужно писать так:
Code: (clickermann) [Select]
SUB(tak)
   // куча кода
   $p = 2 // после выполнения изменяем переменную
END_SUB

// при запуске скрипта в самом начале добавил переменную
DEFINE($p, 0)

// чтобы при первом запуске отработало
IF((($_time_h = 6) | ($_time_h = 14) | ($_time_h = 22)) | ($p = 0))
   tak()
END_IF

Вот скрипт для теста работы
Code: (clickermann) [Select]
LOGCLEAR
LOGSHOW (1, 100,100)
go:

SUB(tak)
   LOGWRITE ("Подпрограмма: ", $timeh)
   
   $p = 2 // после выполнения изменяем переменную
END_SUB

// при запуске скрипта в самом начале добавил переменную
DEFINE($p, 0)

// чтобы при первом запуске отработало
LOGWRITE ("Время: ", $timeh)

IF((($timeh = 6) | ($timeh = 14) | ($timeh = 22)) | ($p = 0))
   tak()
END_IF

WAITMS(500)

INC($timeh,1)

IF($timeh = 25)
   $timeh = 0
END_IF

GOTO(go)