Я искал возможное решение на многих форумах в течение нескольких дней, но не повезло; (Я отправлю свой вопрос здесь и ваш ответ очень ценитсякак реализовать функцию обратного вызова таймера в C под Linux
IDEA:. Используйте скрипт для управления освещением (в C под Linux)
ПРИМЕНЕНИЕ СЦЕНАРИЙ У меня есть три индикатора: красный, синий и зеленый. Например, Теперь через 10 секунд включите красный свет на 2 секунды: С этого момента через 15 секунд включите синюю подсветку в течение 10 секунд; С этого момента в 21 секунде , включите красный свет в течение 5 секунд, С этого момента через 5 секунд включите зеленый свет в течение 7 секунд; С этого момента через 103 секунды включите зеленый свет в течение 11 секунд; ... .. Когда и как долго включить свет абсолютно произвольно. И эта программа должна быть способна расширять до сотни световых и тысяч графиков.
КАК КОДИРОВАТЬ ИНФОРМАЦИЮ Моя идея состоит в том, чтобы иметь два процесса и один почтовый ящик: Первый процесс считывает файл сценария и анализирует графики во многих таймерах. По истечении таймера он отправляет сообщение (включая идентификатор света и действие - ВКЛ или ВЫКЛ.) В почтовый ящик. Второй процесс - включить или выключить указанный свет на основе сообщения из почтового ящика.
Каждое расписание будет разобрано на два таймера: Расписание: через 10 секунд включите красный свет на 2 секунды; Разработано для: Таймер 1: таймер истечет через 10 секунд; после истечения срока действия он передает идентификатор света (красный свет) и действие (ВКЛ) в качестве сообщения в почтовый ящик; Таймер 2: таймер истекает через (10 + 2) секунды; после истечения срока действия он передает идентификатор света (красный свет) и действие (ВЫКЛ) в качестве сообщения в почтовый ящик;
Второй процесс постоянно проверяет почтовый ящик и принимает правильное действие при правильном освещении на основе полученного сообщения.
МОЙ ВОПРОС Таймер в Linux() выпускает один и тот же сигнал SIGALRM с истекшим сроком действия. Я не могу передать идентификатор света и действие в почтовый ящик. У меня есть другой способ сделать это? Большое спасибо.
+1: Правильная техника заключается в том, чтобы упорядочить события в списке (каждый из которых идентифицирует два раза и свет - время его включения и время его отключения), чтобы первое событие в порядке в начале списка. Вы можете пройти через список, ожидающий соответствующего периода между действиями. –