gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:18:32 25 4
gpt4 key购买 nike

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

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

是使用线程来解决这个问题更好,还是我应该重写类以基于工作事件进行处理?目标是,GUI 不会卡住。

编辑:我使用带有隐蔽 run() 函数的 QThread 派生工作类解决了这个问题,该函数在后台处理串行端口通信并在有新信息可用时更新 gui。

最佳答案

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

  • 如果没有可用数据怎​​么办?在有数据之前,GUI 是否会阻塞?例如,如果发件人已关闭,则不会有数据
  • 如果 I/O 设备不再可用,程序会做什么?例如,如果它是一个 USB 转串口适配器,如果适配器被拔掉会怎样?

关于c++ - 使用 Qt 在 C++ 中进行线程串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com