gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:58 28 4
gpt4 key购买 nike

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

最佳答案

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

听起来您没有充分的理由为您的用例使用信号处理程序。如果您的信号处理程序只是向另一个线程发送信号以进行读取,为什么不使用阻塞读取或从另一个线程中选择?

关于c++ - Linux 上的串行端口通信 - 为什么使用 SIGIO 处理程序不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777768/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com