首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux上的串行端口通信-为什么使用SIGIO处理程序不好?

Linux上的串行端口通信-为什么使用SIGIO处理程序不好?
EN

Stack Overflow用户
提问于 2012-05-28 06:35:06
回答 1查看 2.3K关注 0票数 1

在工作中,我被要求在Linux上使用C++为工业硬件实现一个新的控制器应用程序。一个关键功能是使用modbus在设备之间使用无线电调制解调器通信。我可以很好地读取和写入数据到串行端口ttyS0,但是我使用了一个信号处理程序来处理SIGIO信号,以告知主控制循环何时数据已经到达端口进行读取。定时至关重要,因为协议将传输结束定义为3.5个字符长度,这是我需要检测的。我在网上看到,使用SIGIO处理程序并不是一个好主意(包括对这个here on stackoverflow的回答)。有人能告诉我为什么这种方法不受欢迎吗?我的首选是使用poll()select()在新线程上运行传入消息监视,但我的老板热衷于信号处理程序方法,但我们都是新手,所以如果您有任何解释,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 02:45:33

信号处理程序增加了大量的复杂性和与可重入性和原子性相关的bug风险。你可以在这里看到讨论文章:http://www.ibm.com/developerworks/linux/library/l-reent/index.html

听起来你没有一个很好的理由在你的用例中使用信号处理程序。如果您的信号处理程序只是要向另一个线程发送信号来执行读取,为什么不直接使用阻塞读取或从另一个线程进行选择呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10777768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档