Прошу помощи вот в каком вопросе...
Есть скрипт включения режима охраны объекта. Выполняются последовательные проверки закрытых окон/дверей, выключение освещения, ненужных потребителей и т. д... В числе прочего есть команда на закрытие рольставен. Естественно эта команда требует определенного времени для исполнения. При закрытых рольставнях срабатывают концевые герконы и я могу судить о том, что они закрылись.
Корректно ли будет использование такой конструкции:
if (gg('bath_roll3.status')<>1 or gg('bath_roll4.status')<>1) //если рольставни не закрыты
{
cm('bathRoll2_close.turnOn'); // даем команду на закрытие
$maxt=time()+90; //устанавливаем максимальное время на выполнение команды закрытия 90 секунд
while (gg('bath_roll3.status')<>1 or gg('bath_roll4.status')<>1) //запускаем цикл пока не сработают герконы
{
$curt=time();
if ($curt > $maxt) break; // прерываем цикл если время больше заданного
}
}
Цикл и таймер в скрипте.
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Цикл и таймер в скрипте.
while такой будет очень сильно нагружать систему. как минимум внутрь следует поставить sleep(1);, чтобы не было такой нагрузки.
ну а в целом было бы хорошо продумать ещё какой-нибудь вариант, чтобы вообще в цикле не ждать закрытия ибо если скрипт выполняется по кнопке веб-интерфейса, то веб-сервер его может просто "прибить" на полпути из-за ограничений на время выполнения веб-запроса (60 секунд, если не ошибаюсь).
с последним можно бороться установив в начале сценария set_time_limit(600); //лимит в 10 минут
но всё равно не очень красиво, хоть и вполне рабочий вариант
ну а в целом было бы хорошо продумать ещё какой-нибудь вариант, чтобы вообще в цикле не ждать закрытия ибо если скрипт выполняется по кнопке веб-интерфейса, то веб-сервер его может просто "прибить" на полпути из-за ограничений на время выполнения веб-запроса (60 секунд, если не ошибаюсь).
с последним можно бороться установив в начале сценария set_time_limit(600); //лимит в 10 минут
но всё равно не очень красиво, хоть и вполне рабочий вариант
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Цикл и таймер в скрипте.
Спасибо, собственно потому и прошу помощи, что ничего другого в голову не приходит...sergejey писал(а): было бы хорошо продумать ещё какой-нибудь вариант, чтобы вообще в цикле не ждать закрытия
