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();