Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Kedrick on May 07, 2015, 09:29:09 PM
-
Несколько раз в сутки требуется запускать одну подпрограмму в определенное время
На скорую руку набросал так
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
Сейчас захотелось оптимизировать, ибо слишком глупо и громоздко
Сделал так
// при запуске скрипта в самом начале добавил переменную
$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 нифига не отработало, хотя все остальное выполняется. Может я чего-то недопонимаю и не так написал?
Помогите разобраться )
-
Тебе нужно писать так:
SUB(tak)
// куча кода
$p = 2 // после выполнения изменяем переменную
END_SUB
// при запуске скрипта в самом начале добавил переменную
DEFINE($p, 0)
// чтобы при первом запуске отработало
IF((($_time_h = 6) | ($_time_h = 14) | ($_time_h = 22)) | ($p = 0))
tak()
END_IF
Вот скрипт для теста работы
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)