0

我有一个获取串行数据并显示在仪表板类型 GUI 中的 Qt 应用程序。该程序的基本结构如下:

EDIT SerialPort(从 QIODevice 继承)对象被创建,并将它们的 readyRead 信号连接到插槽。当新数据进入时,它会通过消息处理程序通过程序进行解释和发送。最终,数据进入 GUI 层,并在此处显示给用户。

该程序在 Windows 7 中运行良好,但是当我在松下笔记本电脑上运行它时,运行 Windows XP,程序启动正常,但片刻后 GUI 停止更新。我的意思是当新数据进入时,gui 不会重绘,直到用户单击按钮或调整大小。我想知道这种行为的一些可能原因是什么。我认为可能是主线程被所有传入的串行数据所淹没,但我认为 GUI 无论如何都在单独的线程中运行。我错了吗?有没有人对可能发生的事情有任何想法?

4

1 回答 1

0

如果SerialPortIO不在自己的线程中,那么它在等待新数据时可能会阻塞。我没有使用过那个特定的 Serial 类,但一般来说,数据流可能应该在它自己的线程中。

qApp->processEvents()您可以通过定期调用强制程序更新 GUI ,并且 GUI 应该更新。

此外,qDebug在您的代码中添加一些语句,尤其是在您怀疑调用过于频繁或不足的函数的顶部。

使用以下行,它可以很容易地跟踪多线程应用程序中发生的事情:

qDebug() << Q_FUNC_INFO;

希望有帮助。

于 2013-03-07T19:40:54.063 回答