Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃
2016-06-19 15:24
447 查看
api含义:QCoreApplication::processEvents() 将处理所有事件队列中的事件并返回给调用者。
问题描述:
当主线程在某个槽函数里正在执行processEvents时, 刚好有一个能响应此槽函数的信号发送过来了(肯定是其他线程发的信号), 这时就可能会发生可怕的递归,
导致栈溢出崩溃。 原因是processEvents,进入到无尽的递归中。
示例代码:
bugThread.h
bugs.h & bugs.cpp
问题描述:
当主线程在某个槽函数里正在执行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(); }
相关文章推荐
- android捕获ListView中每个item点击事件
- 安卓传递自定义类型
- 易生活(八)-APP--即时通信业务逻辑
- Hibernate报错(user is not mapped)
- Android文件操作(SD卡、缓存)工具类
- iOS CFObject和NSObject的相互转换(使用bridge)
- Android中数据库的使用
- Android 获取并显示远程图片 Picasso框架的使用
- android中自定义的dialog中的EditText无法弹出输入法解决方案
- Android入门——Fragment详解之Fragment与Activity通信及数据交换(二)
- Android 进程间通信
- android你可能要用到的自定义View分享
- Android新特性之CardView的简单使用
- 转: Android基于HLS和RTMP协议的第三方SDK选择
- cocos2dx 历史版本下载问题
- 给 Android 开发者的 RxJava 详解
- android5.0之animated-selector
- android中的:scaleType属性
- iOS真机测试碰到错误linker command failed with exit code 1 (use -v to see invocation)
- Android系统系统升级过程分析之------update.zip包的制作