使用Qt在C ++中进行线程串口通信

时间:2017-01-16 06:08:15

标签: c++ multithreading qt serial-port qthread

我正在编写一个QT桌面应用程序,它将显示从串行端口收到的信息。因此,使用标准Windows API功能创建了一个类并将其打包到DLL中,以便与连接的设备(CreateFile,ReadFile,WriteFile,...)进行通信。

此时计时器以预定义的速率调用DLL [< 200ms]这导致gui短时间冻结。因此,我正在考虑使用线程来执行串口操作,这也将显示所有内容。

最好是使用线程来解决这个问题,还是应该重写类来完成工作事件?目标是,gui不会冻结。

编辑: 我使用QThread派生的worker类解决了这个问题,该类具有一个黯然失色的run()函数,该函数在后台处理串口通信并在新信息可用时更新gui。

1 个答案:

答案 0 :(得分:1)

在许多用例中,在单独的线程上执行所有阻塞(同步)I / O是一种很好的做法,尤其是涉及图形用户界面时。 Here's a page I've referenced关于同步I / O的挑战(与异步相反,代码不会阻塞,但仍然是单线程的,或者是您正在讨论的并行)。问题不仅仅是你提出的问题,例如:

  • 如果没有可用数据怎​​么办? GUI是否会阻塞,直到有数据?例如,如果发件人已关闭,那么就没有数据
  • 如果I / O设备不再可用,程序会怎么做?例如,如果它是USB转串口适配器,如果拔掉适配器会发生什么?