我已经在许多论坛上搜索了几天可能的解决方案,但没有运气; (我在这里发布我的问题,非常感谢您的回复。
主意:
使用脚本控制灯光(Linux下C语言)
应用场景
我有三盏灯:红、蓝、绿。脚本有控制它们的时间表。例如,
从现在起10秒后,亮红灯2秒;
从现在起15秒后,开启蓝灯10秒;
从现在起21秒后,亮红灯5秒;
从现在起5秒后,绿灯亮7秒;
从现在起103秒后,绿灯亮11秒;
……
何时开灯、开灯多长时间完全是任意的。这个程序应该能够扩展到一百个灯和数千个时间表。
如何编码
我的想法是有两个进程和一个邮箱:
第一个进程读取脚本文件并将时间表解析为许多计时器。一旦定时器到期,它就会向邮箱发送一条消息(包括灯 ID 和操作 - 开或关 -)。
第二个过程是根据邮箱中的消息打开或关闭指定的灯。
每个调度将被解析为两个计时器:
时间表:从现在起10秒内,亮红灯2秒;
解析为:
定时器1:定时器将在10秒后到期;一旦过期,它将灯ID(红灯)和动作(ON)作为消息传递到邮箱;
定时器2:定时器将在(10+2)秒后到期;一旦过期,它将灯 ID(红灯)和操作(关闭)作为消息传递到邮箱;
第二个进程不断检查邮箱,并根据收到的消息在适当的光线下采取适当的操作。
我的问题
Linux 中的定时器 () 仅在到期时发出相同的 SIGALRM 信号。我不可能将灯光 ID 和操作传递到邮箱。我还有其他办法吗?多谢。
SIGALRM 不是一种非常可靠的方法来实现这样的事情,你不能同时有多个警报请求。这两个流程设计是否意味着类似at(1) http://linux.die.net/man/1/at/atd(8)?不幸的是,“at”在这里使用起来不太精确,我不确定当你安排某件事时它是否会使用秒。
然而,这个问题其实很简单,只需要一个程序就可以解决。只需将任务分成“打开/关闭灯 X”之类的事件,将它们放入有序队列中,并有一个循环读取队列并休眠,直到需要采取行动为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)