簡體   English   中英

C++ 中的線程串行端口通信與 Qt

[英]threaded serial port communication in C++ with Qt

我正在編寫一個 QT 桌面應用程序,它將顯示從串行端口接收到的信息。 因此,使用標准的 Windows API 功能創建了一個類並將其打包到 DLL 中,以便與連接的設備(CreateFile、ReadFile、WriteFile 等)進行通信。

目前,計時器以預定義的速率 [< 200 毫秒] 調用 DLL,這會導致 gui 凍結一小段時間。 因此,我正在考慮使用線程來執行串行端口的操作,這也將顯示所有內容。

是更好地使用線程來解決這個問題還是我應該重寫該類來執行基於工作事件的工作? 目標是,gui 不會凍結。

編輯:我使用 QThread 派生的工作類和一個被遮蔽的 run() 函數解決了這個問題,它在后台處理串行端口通信並在新信息可用時更新 gui。

在許多用例中,在單獨的線程上執行所有阻塞(同步)I/O 是一種很好的做法,尤其是在涉及圖形用戶界面時。 這是我參考的關於同步 I/O 挑戰的頁面(而不是異步,其中您的代碼不會阻塞但仍然是單線程的,或者您正在討論的並行)。 除了您提出的問題之外,還有更多問題,例如:

  • 如果沒有可用數據怎​​么辦? GUI 會阻塞直到有數據嗎? 例如,如果發件人關閉,那么將沒有數據
  • 如果 I/O 設備不再可用,程序會做什么? 例如,如果是USB轉串口適配器,拔掉適配器會怎樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM