相关文章推荐
细心的拖把  ·  android - Dagger ...·  10 月前    · 
紧张的大蒜  ·  如何在Debian 10下安装 ...·  1 年前    · 

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