【发布时间】:2016-05-30 20:22:54
【问题描述】:
我遇到了一些问题,我不知道该怎么办。
我正在运行 Qt 4.8.6,Qt creator 3.3.2,Ubuntu 12.04 中的环境交叉编译到运行 Debian 7 内核 3.8.13 的 Beaglebone Black。
我看到的问题是这段代码:
if (qApp->hasPendingEvents())
{
qDebug() << "pending events";
}
qApp->processEvents(QEventLoop::AllEvents, 10);
根据(至少我对)Qt 文档的解释,它不能正常工作。我希望进程事件循环最多在指定的 10 毫秒内起作用。
发生的情况是永远不会打印 qDebug 语句。然后,我希望因此没有要处理的事件,并且流程事件语句的进出速度非常快。大多数时候都是这样。
会发生什么(不是每次,但经常发生)qDebug 语句被跳过,processEvents 语句执行 1 到 2 秒。
有什么方法可以让我深入了解进程事件中发生的事情并找出导致延迟的原因?
【问题讨论】:
-
我没有看到你的其余代码,但看起来你正在编写伪同步意大利面条代码,而在你的代码中的其他地方这可能会让你反感。您正在某处执行一项操作,该操作会阻塞 1-2 秒。当你重新进入事件循环时,任何现有的超时都会被忽略,所以如果这个
processEvents调用你的代码再次调用processEvents,你就有麻烦了。一般来说,您可以编写干净的异步代码,而无需任何processEvents调用。 -
一般来说,如果您希望在给定时间后重新获得控制权,您应该为此使用计时器。然后,您将不会与重入问题或处理时间“太长”的系统事件作斗争 - 或者,至少,您将尽最大努力尽早控制您的代码。