在工作中,我被要求在 Linux 上使用 C++ 为工业硬件实现一个新的控制器应用程序。一个关键特性是在使用 modbus 的设备之间使用无线电调制解调器通信。我能够很好地读取和写入串行端口 ttyS0 的数据,但是我正在使用 SIGIO 信号的信号处理程序来告诉主控制循环何时数据已到达端口进行读取。时间很重要,因为协议将传输结束定义为我需要检测的 3.5 个字符长度。我在网上看到,为此目的使用 SIGIO 处理程序不是一个好主意(包括在 stackoverflow 上的答案)。谁能告诉我为什么这种方法不受欢迎?我的偏好是使用poll()
或在新线程上运行传入消息监控select()
但我的老板热衷于信号处理方法,但我们都是 Linux 新手,因此我们将不胜感激。
问问题
2330 次
1 回答
1
信号处理程序增加了大量的复杂性和与可重入性和原子性相关的错误风险。您可以在此处查看讨论文章:http: //www.ibm.com/developerworks/linux/library/l-reent/index.html
听起来您没有充分的理由为您的用例使用信号处理程序。如果您的信号处理程序只是要向另一个线程发出信号来进行读取,为什么不使用阻塞读取或从另一个线程中选择呢?
于 2012-05-29T18:45:32.947 回答