【发布时间】:2014-07-21 12:00:53
【问题描述】:
我遇到问题,QT 线程以某种方式停止了主 GUI。
回答第一个问题...是的,QThread 不是子类,而是以“正确的方式”完成的。
线程长期运行(不是“do x then exit”),它的主循环确实有延迟/休眠。
线程的主要目的是从其他地方收集数据,合成图像,并通过 COM 端口传输该图像。
我认为有些编码领域可能会造成问题。
我正在使用我自己的“睡眠”功能,因为 msleep 不可用(仅 QThread 专用)。 有人能看出下面的代码有什么问题吗?
void SendImageJob::tSleep(int ms)
{
QElapsedTimer timer;
timer.start();
while ((timer.elapsed() < ms) && !abort)
{
QCoreApplication::processEvents();
}
}
第二个问题可能是通过信号/插槽发送到/从线程发送的数据量。 通过信号发送的图像数据大小约为 16KB,并以 15fps 的速度发送。 这对于排队的连接信号来说是否太多了?
我会检查 Qt 信号队列长度,但我不知道如何做到这一点?
提前致谢!
【问题讨论】:
-
像这样运行自己的伪事件循环并不适合 Qt 自己的事件循环;如果可以,更好的方法是将代码组织成一系列槽方法调用,而不是调用 tSleep(),而是执行 QTimer::singleShot(ms, this, SLOT(MyNextFunction())) 和返回,以便 MyNextFunction() 将在适当的时间被调用(MyNextFunction() 然后将执行过去的 tSleep() 调用之后的代码)。
标签: c++ multithreading qt signals-slots qthread