有没有一种干净的方法来检查Qt主应用程序队列的当前大小?由于我发出了很多信号,因此我想监视处理Ui线程上的插槽有多大的延迟。
例如,之后:
emit Signal();
emit Signal();
emit Signal();
我希望能够调用这样的东西,这将告诉我还有多少信号需要处理。
QApplication::checkQueueSize();
最佳答案
Imo,应该有可能(如果仅用于记录/跟踪目的)获取有关QThread事件队列大小的信息。
可以使用以下代码段获取特定线程的postEventList的大小:
#include <QThread>
#include <private/qthread_p.h>
int getEventQueueSize(QThread* thread)
{
auto threadData = QThreadData::get2(thread);
QMutexLocker locker(&threadData->postEventList.mutex);
return threadData->postEventList.size();
}
您需要特别注意使用的包含路径,因为需要提供到private / qthread_p.h和private / qobject_p.h的路径。因此,除了通常包含的内容外,您还需要添加:
g++ ... -isystem /usr/include/qt5/QtCore/5.7.1/QtCore ...
免责声明:使用风险自负。 由于这涉及到Qt的内部,并且可能是意外使用,因此在使用此方法时要格外小心。当postEventList.mutex锁定时,可能会出现死锁(如上例所示)。还要注意,QVector不是线程安全的(postEventList是QVector),postEventList.mutex是非递归的。