繁体   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