在工作中,我被要求在Linux上使用C++为工业硬件实现一个新的控制器应用程序。一个关键功能是使用modbus在设备之间使用无线电调制解调器通信。我可以很好地读取和写入数据到串行端口ttyS0,但是我使用了一个信号处理程序来处理SIGIO信号,以告知主控制循环何时数据已经到达端口进行读取。定时至关重要,因为协议将传输结束定义为3.5个字符长度,这是我需要检测的。我在网上看到,使用SIGIO处理程序并不是一个好主意(包括对这个here on stackoverflow的回答)。有人能告诉我为什么这种方法不受欢迎吗?我的首选是使用poll()或select()在新线程上运行传入消息监视,但我的老板热衷于信号处理程序方法,但我们都是新手,所以如果您有任何解释,我们将不胜感激。
发布于 2012-05-30 02:45:33
信号处理程序增加了大量的复杂性和与可重入性和原子性相关的bug风险。你可以在这里看到讨论文章:http://www.ibm.com/developerworks/linux/library/l-reent/index.html
听起来你没有一个很好的理由在你的用例中使用信号处理程序。如果您的信号处理程序只是要向另一个线程发送信号来执行读取,为什么不直接使用阻塞读取或从另一个线程进行选择呢?
https://stackoverflow.com/questions/10777768
复制相似问题