一、坑的现象

程序崩溃

二、遇坑的原因

qt中遇到耗时的操作需要等待,通常会使用QEvenloop去等待,并使用定时器设置超时时间,使得界面不会卡住。但使用不当会造成问题,错误写法是:

void xx::waitTime(const int &nTimeout)
{//超时保护QTimer::singleShot(nTimeout, [&event](){m_eventLoop.quit();});m_eventLoop.exec();
}

这种写法有个问题,当xx这个实例类释放的时候,m_eventLoop内存没有了,但是定时器还在计时,超时后会继续调用槽函数,此时就会发生崩溃。有些new出QTimer的操作,要是没有给定时器赋父对象,QTimer实例一样不会停止计时。
修正这个问题的话,有两种做法,一种是eventLoop退出的同时,停止定时器,另一种就是判断eventLoop是否释放。

三、正确写法

void xxxxx::waitTime(const int &nTimeout)
{std::shared_ptr<QEventLoop> loopPtr = std::make_shared<QEventLoop>();QTimer::singleShot(nTimeout, this, [=](){loopPtr->quit();});loopPtr->exec();
}

四、总结

上述只是QTimer使用不当比较常见的一种问题,不管是什么时候QTimer没有正常停止都可能会引起不必要的问题,new QTimer的时候最好给父对象,不然没出崩溃问题,可能也会内存泄漏。

QTimer使用不当崩溃相关推荐

  1. 【Qt】Qt信号与槽使用不当,使程序崩溃

    问题描述 跨线程使用Qt信号和槽,信号发送时间间隔小于槽函数处理时间时,造成程序崩溃. 原因分析 跨线程使用Qt信号和槽时,connect默认是QueuedConnection,队列连接方式. 信号传 ...

  2. linux 使用jstack_案例解析:线程池使用不当导致的系统崩溃

    前几天,发现一台阿里云服务器上的Web服务不可用.远程SSH登录不上,尝试几次登录上去之后,执行命令都显示 -bash: fork: Cannot allocate memory 一看以为是内存泄漏导 ...

  3. Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

    目录 1.QTimer计时器类 2.QThread多线程类 3.事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求.例如,如果需要执行一个特别耗时的操作 ...

  4. 常见Android Native崩溃及错误原因

    作者介绍:王竞原,负责网游刀锋铁骑项目,使用C++10年左右,非常喜欢使用C++,特别是C++11.希望能与广大的C++爱好者多交流. 一.什么是Android的C/C++ NativeCrash A ...

  5. 损害计算机系统,哪些情况下容易导致电脑系统崩溃损坏?

    今天我为大家介绍下什么情况可能会导致电脑系统崩溃,哪些不当操作可以致使电脑系统崩溃蓝屏损坏.电脑系统是一台健康电脑的标志,正确使用电脑会给你带来愉快,不正确的使用电脑会给你带来烦恼.我们有的时候也是比 ...

  6. android按钮点击后闪退_CAD如何恢复自动崩溃、闪退的文件?

    在CAD制图时,有时因为操作不当或其它原因面临崩溃.闪退的问题时该怎么补救.下面进行讲解. 01 奔溃.闪退之后,重新打开CAD软件.点击"应用程序"下拉按钮中的"选项& ...

  7. C++ 常见崩溃问题分析

    一.前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来 ...

  8. 老工程师谈电子物料:别拿一分钱不当回事!

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 一分钱,在现在物价飞涨的年代,早已经退出了货币交流的的历史舞台,成为财务意义上的最小 ...

  9. jvm 崩溃日志设置_JVM致命错误日志(hs_err_pid.log)分析(转载)

    当jvm出现致命错误时,会生成一个错误文件 hs_err_pid.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定.当出现cra ...

最新文章

  1. php字符串比较函数
  2. 最早做无糖茶的统一茶里王,是怎样错过年轻人的?
  3. 【Clickhouse】Clckhouse 视图 可以插入 但是查询不到
  4. Qt Quick实现的疯狂算数游戏
  5. 搭建WinDbg应用程序调试环境
  6. 专家,除了呼吁涨价你还会干点什么?
  7. c语言情话编程,用c语言编写浪漫情话
  8. 第十一部分 项目采购管理
  9. 计算机房温湿度,数据中心机房标准的温湿度范围
  10. MIXLY二次开发(傻瓜版)
  11. 端午节餐厅公众号推文就用来逗微信编辑器
  12. MySql常用函数及命令
  13. 键盘记录器(有发送到指定qq邮箱的功能。附源代码及使用教程,免费下载)
  14. vscode 取消拉去变基_开发工具之 Git 篇
  15. 天才富豪鲁宾:长于资产变废为宝
  16. Python批量修改图片size
  17. MIT-BIH心律失常数据库详解
  18. 迎接全电发票的管理方式,iBox电子会计档案管理系统
  19. MyBatisMySQL
  20. 深度解析Linux读写锁逻辑

热门文章

  1. 操作系统-读者写者问题,写者优先,多个读者可以同时读书(C++实现)
  2. sqllite的基本使用封装
  3. Pycharm连接sqllite
  4. 图解Java设计模式-23种设计模式
  5. 如果互联网公司是一所大学,你Pick哪家?
  6. 论洗地机蓄电池在洗地机运行中起到的重要作用
  7. 微信小程序明星开发者博卡君专访
  8. 老码农公开!我是这样不花钱开CSDN会员的......
  9. ubuntu 启动时,加载后自动进入emergence mode
  10. 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式