Страница 1 из 1

Цикл и таймер в скрипте.

Добавлено: Пт сен 04, 2015 3:11 pm
Victor_S
Прошу помощи вот в каком вопросе...
Есть скрипт включения режима охраны объекта. Выполняются последовательные проверки закрытых окон/дверей, выключение освещения, ненужных потребителей и т. д... В числе прочего есть команда на закрытие рольставен. Естественно эта команда требует определенного времени для исполнения. При закрытых рольставнях срабатывают концевые герконы и я могу судить о том, что они закрылись.
Корректно ли будет использование такой конструкции:
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;
// прерываем цикл если время больше заданного
}
}

Re: Цикл и таймер в скрипте.

Добавлено: Пт сен 04, 2015 3:51 pm
sergejey
while такой будет очень сильно нагружать систему. как минимум внутрь следует поставить sleep(1);, чтобы не было такой нагрузки.
ну а в целом было бы хорошо продумать ещё какой-нибудь вариант, чтобы вообще в цикле не ждать закрытия ибо если скрипт выполняется по кнопке веб-интерфейса, то веб-сервер его может просто "прибить" на полпути из-за ограничений на время выполнения веб-запроса (60 секунд, если не ошибаюсь).
с последним можно бороться установив в начале сценария set_time_limit(600); //лимит в 10 минут
но всё равно не очень красиво, хоть и вполне рабочий вариант

Re: Цикл и таймер в скрипте.

Добавлено: Пт сен 04, 2015 4:29 pm
Victor_S
sergejey писал(а): было бы хорошо продумать ещё какой-нибудь вариант, чтобы вообще в цикле не ждать закрытия
Спасибо, собственно потому и прошу помощи, что ничего другого в голову не приходит...:)