c - Linux下如何用C实现timer的回调函数

标签 c linux timer

我已经在许多论坛上搜索了几天可能的解决方案,但没有找到; (我在这里发布我的问题,非常感谢您的回复。

想法: 使用脚本控制灯光(Linux下C语言)

应用场景 我有三盏灯:红色、蓝色和绿色。该脚本具有控制它们的时间表。例如, 从现在起10秒后,亮红灯2秒; 从现在起15秒后,开启蓝灯10秒; 从现在开始21秒后,亮红灯5秒; 从现在开始5秒后,开绿灯7秒; 从现在起103秒,开绿灯11秒; …… 何时开灯以及开灯多长时间完全是任意的。而且这个程序应该可以扩展到百灯千程。

如何编码 我的想法是有两个进程和一个邮箱: 第一个进程读取脚本文件并将时间表解析为多个计时器。一旦计时器到期,它会向邮箱发送一条消息(包括灯 ID 和操作 – 开或关 –)。 第二个过程是根据邮箱的消息来打开或关闭指定的灯。

每个时间表将被解析为两个计时器: 时间表:从现在起10秒后,亮红灯2秒; 解析为: 定时器 1:定时器将在 10 秒后超时;一旦过期,它将灯 ID(红灯)和 Action (ON)作为消息传递到邮箱; 定时器2:定时器将在(10+2)秒后超时;一旦过期,它将灯 ID(红灯)和 Action (OFF)作为消息传递到邮箱;

第二个进程不断检查邮箱,并根据收到的消息在适当的灯光下采取适当的操作。

我的问题 Linux中的timer()只有在超时后才发出相同的SIGALRM信号。我无法将灯 ID 和操作传递到邮箱。我还有其他办法吗?非常感谢。

最佳答案

SIGALRM 不是实现此类操作的可靠方法,您不能同时有多个警报请求。两个过程设计是否意味着类似于 at(1)/atd(8)?不幸的是,在这里使用“在”并不是那么精确,我不确定它是否会在您安排某事时使用几秒钟。

但是这个问题真的很简单,只需要一个程序就可以解决。只需将任务拆分为诸如“打开/关闭灯 X”之类的事件,将它们放入有序队列并有一个循环读取队列并休眠直到需要采取行动。

关于c - Linux下如何用C实现timer的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736143/

相关文章:

c - 我应该如何在 C 结构中声明字符串?

r - 将可用系统内存分配给 R 中的变量的更好方法?

C. malloc 一个结构体数组,其中有一个结构体指针作为成员变量

arrays - 有什么方法可以初始化没有括号的数组吗?

c - 在Linux中重置忽略信号的掩码

linux - 如何知道ubuntu中默认的音频设备是/dev/audio还是/dev/dsp?

python - 从 python 脚本设置 bash 变量

iPhone:NSTimer

objective-c - Objective c NSTimer 间隔时间设置

javascript - 计算 HH :MM:SS javascript 中两个日期之间的时间差