Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃
Posted maxiongying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃相关的知识,希望对你有一定的参考价值。
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()可能会引起递归,导致栈溢出崩溃的主要内容,如果未能解决你的问题,请参考以下文章