zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    tf2 callback
    JAVA 8 新特性 Optional类
    JAVA 8 新特性 Stream API 终止操作
    JAVA 8 新特性 Stream API 中间操作
    牙醫分普通科8類專科
    asterisk todo
    室内空气质量鉴定
    javascript, jquery, nodejs学习2
    firefox extension教程
    Bjarne Stroustrup announces C++ Core Guidelines
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/5598133.html
Copyright © 2011-2022 走看看