api含義:QCoreApplication::processEvents() 將處理所有事件隊列中的事件並返回給調用者。
問題描述:
當主線程在某個槽函數里正在執行processEvents時, 剛好有一個能響應此槽函數的信號發送過來了(肯定是其他線程發的信號), 這時就可能會發生可怕的遞歸,
導致棧溢出崩潰。 原因是processEvents,進入到無盡的遞歸中。
示例代碼:
bugThread.h
#include <QThread>
class BugThread : public QThread
{
Q_OBJECT
public:
BugThread(QObject* parent) : QThread(parent) {}
signals:
void sigBugsignal();
public:
void run()
{
while(true)
{
emit sigBugsignal();
}
}
};
bugs.h & bugs.cpp
class Bugs : public QMainWindow
{
Q_OBJECT
public:
Bugs(QWidget *parent = 0, Qt::WFlags flags = 0);
~Bugs();
public slots:
void onBugSlot();
private:
Ui::BugsClass ui;
};
Bugs::Bugs(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
BugThread* bt = new BugThread(this);
connect(bt, SIGNAL(sigBugsignal()), this, SLOT(onBugSlot()));
bt->start();
}
Bugs::~Bugs()
{
}
void Bugs::onBugSlot()
{
Sleep(1);
QApplication::processEvents();
}
