在工作中,我被要求在Linux上使用C++實現工業硬件的新控制器應用程序。一個關鍵特性是在使用modbus的設備之間使用無線調制解調器通信。我能夠讀取和寫入數據到串口ttyS0罰款,但我正在使用SIGIO信號的信號處理程序告訴主控制迴路數據何時到達讀取端口。定時是至關重要的,因爲協議將傳輸結束定義爲3.5個字符長度,我需要檢測。我在網上看到,使用SIGIO處理程序對於此目的不是一個好主意(包括對此here on stackoverflow的回答)。任何人都可以告訴我爲什麼這種方法皺起了眉頭?我的首選是使用poll()
或select()
在新線程上運行傳入消息監控,但我的老闆非常熱衷於信號處理程序方法,但我們都是Linux的新手,因此會非常感激地接受任何解釋。Linux上的串口通信 - 爲什麼使用SIGIO處理程序不好?
1
A
回答
1
信號處理程序增加了很多複雜性和與重新進入和原子性有關的bug的風險。你可以在這裏看到一篇討論文章: http://www.ibm.com/developerworks/linux/library/l-reent/index.html
這聽起來並不像你有充足的理由在你的用例中使用信號處理程序。如果您的信號處理程序只是發信號通知另一個線程進行讀取,爲什麼不使用阻塞讀取或從其他線程中選擇?
相關問題
- 1. 處理COM串口通信
- 2. 爲什麼我的信號處理程序不被調用?
- 3. Linux下的串口通信異常?
- 4. 爲什麼tkinter不能很好地處理多處理?
- 5. 小程序 - 串口通信
- 6. 爲什麼我的信號處理程序不能使用sigaction函數?
- 7. 爲什麼只能通過處理程序與UI線程進行通信?
- 8. 信號處理程序實例在Linux編程接口
- 9. SIGPOLL(SIGIO)問題:中斷在執行處理程序
- 10. 爲什麼在dispatchEvent上不調用React事件處理程序?
- 11. 爲什麼linux下的異常處理程序
- 12. 串口通信
- 13. 使用sigaction在Linux中的信號處理程序(C++)
- 14. 爲什麼在linux編程中使用system()會不好?
- 15. 爲什麼我的信號處理程序執行兩次?
- 16. 什麼是使用PHP學習信用卡處理的好教程或書籍?
- 17. 爲什麼要使用websocket,使用它有什麼好處?
- 18. 爲什麼我的信號處理程序不僅僅是等待子進程?
- 19. 更好的使用jQuery處理程序?
- 20. 爲什麼extjs按鈕處理程序不起作用
- 21. 什麼是通用處理程序在asp.net中使用?
- 22. 在Linux上的異常處理程序
- 23. 爲什麼sensorManager.registerListener需要處理程序?
- 24. 爲什麼我的程序在Windows上運行良好,但不是Linux?
- 25. 使用malloc/free在callstack上追蹤信號處理程序中的Linux 64位
- 26. 什麼處理在你好,Lungo應用程序中的導航?
- 27. 爲什麼使用GAE blobstore時上傳處理程序不匹配
- 28. linux設計中的進程間通信
- 29. 爲什麼信號處理程序進入無限循環? - SIGSEGV
- 30. (爲什麼)確實會重置信號處理程序?
我想爲閱讀使用一個單獨的線程,但我的老闆堅持只在一個線程中運行整個應用程序,信號處理程序提醒數據已到達循環。我不想這樣做,但我不是決策者。無論如何感謝您的回覆 - 這是一個有用的鏈接。 – mathematician1975