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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Пт сен 04, 2015 3:11 pm

Прошу помощи вот в каком вопросе...
Есть скрипт включения режима охраны объекта. Выполняются последовательные проверки закрытых окон/дверей, выключение освещения, ненужных потребителей и т. д... В числе прочего есть команда на закрытие рольставен. Естественно эта команда требует определенного времени для исполнения. При закрытых рольставнях срабатывают концевые герконы и я могу судить о том, что они закрылись.
Корректно ли будет использование такой конструкции:
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;
// прерываем цикл если время больше заданного
}
}
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Пт сен 04, 2015 3:51 pm

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Пт сен 04, 2015 4:29 pm

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