0

我正在开发一个关于数据采样和实时显示的项目,如示波器。数据以高传输速率通过虚拟 COM 端口传输到 PC。我在WindowsXP上使用QT4.8.4 + Qextserialport来完成串口通信。

我已经使用 AccessPort 测试了该设备。它可以从端口接收数据,但没有响应写入它。如果我想让设备停止上传数据,我必须停止设备并向其写入停止命令,重新启动设备,然后设备停止上传。使用一个线程处理读写的应用程序也是如此。我不想完全关闭端口。我只是想输入一些命令来改变一些东西,采样率,数据格式等。

所以,我尝试了多线程。我从以下链接下载了参考代码。 http://www.qtcentre.org/threads/21063-QextSerialPort-with-QTimer-approch-for-reading?p=103325&highlight=#post103325 (对不起,我真的不知道如何在这个网站上正确粘贴代码)

在这段代码中,作者派生了QThread的两个子类。一个是读端口,一个是写端口。他还在这两个子类中重新实现了 run()。我尝试了这段代码,但发现在接收代码时,我的 GUI 冻结了。

似乎以下线程中的作者与我遇到了同样的问题。 Qt:使用线程和信号/插槽时,GUI 有时会冻结

但我对这个线程有疑问。

  1. 作者提到“在 GUI 线程中运行代码时,没有问题”。

当GUI线程中的所有代码时,作者的意思是一切正常吗?那么,他为什么使用工作线程和进程线程呢?

  1. 作者提到了“进程线程”

我是否需要另一个进程线程与负责显示的 GUI 线程一起工作?(我不仅需要显示数据,还需要显示波形,都必须实时)

请给我一些关于如何克服这个问题的提示。非常感谢。

4

1 回答 1

0

简短的回答是肯定的。在 GUI 线程上进行任何繁重的处理都会导致 GUI 冻结(尤其是如果您阻塞)。相反,您应该有一个更新数据的独立线程,或者为特定任务分拆工作线程。无论哪种情况,当有新数据要显示时,您应该在有新数据要显示时向 GUI 线程发出信号。如果可能的话,我建议使用 MVC 模式并实现一个 QAbstractItemModel 来为您的视图提供数据(因为它有一个定义的模式来提供这些更新)。

于 2013-03-13T16:25:18.637 回答