Добрый.
Колхожу для себя небольшую автоматизацию на нескольких простых контроллерах. Контроллеры могут отправлять и принимать данные (в моем случае от php скрипта).
Простые задачи - "нажали на кнопку => включили/выключили свет" - реализуются тривиально и просто
//код утрирован и упрощен
$click = $_GET["click"];
if ( $click == "1" )
{
switchOver();
}
function switchOver()
{
file_get_contents("http://192.168.0.201/?lamp=01&cmd=off");
}
Примерно аналогично прописано считывание RFID ключа - получили ID ключа => "что-то сделали"; опрос по cron со стороны сервера некоторых датчиков и так далее.
А как правильнее реализовать, например "мигание". Есть реле, есть лампочка, включаем на 2 секунды, выключаем на 2 секунды...
В простом и грубом исполнении - это бесконечный цикл с задержкой
while (true)
{
file_get_contents("http://192.168.0.201/?out=1&cmd=on");
sleep(2000);
file_get_contents("http://192.168.0.201/?out=1&cmd=off");
sleep(2000);
}
Допустим должно быть "мигание", после срабатывания датчика. Да, можно поставить break на некое условие, но пока будет выполнятся "sleep" - все будет простаивать.
Имеет ли смысл подобные задачи запускать в отдельных потоках, а потом при необходимости их убивать по некому id? Или есть классическое решение подобных задач?
Пока рассматриваю exec("command &") как одно из потенциальных решений