2013-03-13 97 views
0

我正在开发一个关于数据采样和示波器等实时显示的项目。数据通过虚拟COM端口以高转换率传输到PC。我正在使用QT4.8.4 + Qextserialport在WindowsXP上完成串行端口通信。我需要多线程吗?

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

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

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

看来,作者在下面的线程遇到了同样的问题与我。 Qt: GUI sometimes freezing when using threads and signals/slots

但我对此主题有疑问。

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

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

  • 提到“处理线程”
  • 是否需要另一个进程线程与GUI线程工作笔者负责显示?(我需要显示不只有数据,但波形,都必须实时)

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

    +0

    GUI框架拼写为小写字母“Qt”。带大写字母T的QT通常表示Apple的QuickTime。 – Oberon 2013-03-13 15:43:38

    回答

    0

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