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();
    }
  • 相关阅读:
    curl crt
    test with nmap
    C#查询XML解决“需要命名空间管理器”问题
    Dapper实用教程
    javascript 计算两个日期的差值
    Glib学习笔记(二)
    安装osquery笔记
    Golang多线程简单斗地主
    PHP扩展开发之Zephir
    zabbix 安装记录
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/5598133.html
Copyright © 2011-2022 走看看