码迷,mamicode.com
首页 > 移动开发 > 详细

Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃

时间:2016-06-19 16:52:39      阅读:661      评论:0      收藏:0      [点我收藏+]

标签:

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

Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃

标签:

原文地址:http://www.cnblogs.com/senior-engineer/p/5598133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!