加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:51:05 所属栏目:Linux 来源:网络整理
导读:我已经在很多论坛上搜索了可能的解决方案好几天但没有运气; (我在这里发布我的问题,非常感谢你的回复. 理念: 使用脚本来控制灯光(在Linux下的C语言中) 应用场景 我有三个灯:红色,蓝色和绿色.该脚本具有控制它们的计划.例如, 从现在起10秒钟,打开红灯2秒钟;
我已经在很多论坛上搜索了可能的解决方案好几天但没有运气; (我在这里发布我的问题,非常感谢你的回复.

理念:
使用脚本来控制灯光(在Linux下的C语言中)

应用场景
我有三个灯:红色,蓝色和绿色.该脚本具有控制它们的计划.例如,
从现在起10秒钟,打开红灯2秒钟;
从现在开始15秒,打开蓝灯10秒钟;
从现在开始21秒,打开红灯5秒钟;
从现在起5秒钟,打开绿灯7秒钟;
从现在起103秒,打开绿灯11秒;
… ..
打开灯的时间和时间完全是任意的.而且这个程序应该能够扩展到百灯和数千个时间表.

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

每个计划将被解析为两个计时器:
时间表:从现在起10秒钟,打开红灯2秒钟;
解析:
定时器1:定时器将在10秒后到期;一旦过期,它将光ID(红灯)和动作(ON)作为消息传递给邮箱;
定时器2:定时器将在(10 2)秒内到期;一旦过期,它将光ID(红灯)和动作(OFF)作为消息传递给邮箱;

第二个进程不断检查邮箱,并根据收到的消息对正确的灯进行适当的操作.

我的问题
Linux()中的计时器仅在过期时发出相同的SIGALRM信号.我无法将灯ID和操作传递给邮箱.我还有其他办法吗?非常感谢.

解决方法

SIGALRM不是非常可靠的方式来实现这样的任何事情,你不能同时拥有多个警报请求.那两个流程设计是不是像 at(1) / atd(8)那样?不幸的是,“at”在这里使用起来并不是那么精确,我不确定它甚至会在您安排某些事情时使用秒数.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读