2012-05-27 20 views
1

在工作中,我被要求在Linux上使用C++實現工業硬件的新控制器應用程序。一個關鍵特性是在使用modbus的設備之間使用無線調制解調器通信。我能夠讀取和寫入數據到串口ttyS0罰款,但我正在使用SIGIO信號的信號處理程序告訴主控制迴路數據何時到達讀取端口。定時是至關重要的,因爲協議將傳輸結束定義爲3.5個字符長度,我需要檢測。我在網上看到,使用SIGIO處理程序對於此目的不是一個好主意(包括對此here on stackoverflow的回答)。任何人都可以告訴我爲什麼這種方法皺起了眉頭?我的首選是使用poll()select()在新線程上運行傳入消息監控,但我的老闆非常熱衷於信號處理程序方法,但我們都是Linux的新手,因此會非常感激地接受任何解釋。Linux上的串口通信 - 爲什麼使用SIGIO處理程序不好?

回答

1

信號處理程序增加了很多複雜性和與重新進入和原子性有關的bug的風險。你可以在這裏看到一篇討論文章: http://www.ibm.com/developerworks/linux/library/l-reent/index.html

這聽起來並不像你有充足的理由在你的用例中使用信號處理程序。如果您的信號處理程序只是發信號通知另一個線程進行讀取,爲什麼不使用阻塞讀取或從其他線程中選擇?

+0

我想爲閱讀使用一個單獨的線程,但我的老闆堅持只在一個線程中運行整個應用程序,信號處理程序提醒數據已到達循環。我不想這樣做,但我不是決策者。無論如何感謝您的回覆 - 這是一個有用的鏈接。 – mathematician1975

相關問題