正常操作

正常写Qt的多线程,需要继承QThread,然后重写run函数,调用start后,在run函数中实现子线程的运行,这个时候会开启事件循环,可以调用quit()函数来结束当前的线程。

其他操作

根据qt的官方文档,可以通过连接槽的方式,然后利用Qt::DiretionConnection来实现多线程。大概如下所示:

QThread proxyThread = new QThread();
connect(proxyThread, &QThread::started, this, &TestThread::runEx, Qt::DirectConnection);
connect(this, &TestThread::finished, proxyThread, &QThread::quit);

在RunEx函数末,emit finished()信号,即可调用quit来“尝试”结束proxyThread线程。

但是如果在主线程中调用proxyThread->isRunning()的死循环来判断当前线程是否结束,得到的结果始终都是true。

如果贸然的使用delete来释放线程,会让程序崩溃。

看到网上有很多说法,比如说调用isFinished来判断,但是isFinished一直都是false。

换句话说,quit()根本就没有让proxyThread结束掉。

在查阅各种资料后,发现在“主线程”调用terminate()可以主动的结束子线程。

也就是

emit finished();
proxyThread->terminate();

即可正确结束线程,调用delete也不会让程序崩溃了。

最新文章

  1. php ajax请求和返回
  2. 002-添加网站ico图标
  3. maven 打包 xml文件
  4. js拆分数组
  5. SQL Server练习
  6. 15个必须知道的chrome开发者技巧(转)
  7. arcgis直连oracle
  8. 【js】正则表达式豁然开朗
  9. [改善Java代码]不推荐使用binarySearch对列表进行检索
  10. Android ListView相关 头和尾 headView footerView
  11. android反编译工具 ApkDec-Release-0.1
  12. mac系统奔溃无法启动时,如何备份重要资料
  13. atitit.ajax bp dwr 3.该票据安排使用的流量汇总 VO9o.....
  14. 关于hasnextLine()方法的一些理解
  15. C++ 初步
  16. Beta(1/7)
  17. ubuntu安装zabbix 3.2(转)
  18. python 验证码识别
  19. Mybatis运行错误:信息: SQLErrorCodes loaded: [DB2, Derby, H2, HDB, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
  20. Qt5模型/视图结构-视图(View)

热门文章

  1. 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合
  2. 一、shell编程与变量
  3. leetcode题解#3:无重复字符的最长子串
  4. application.yml 常用基本配置
  5. docker-compose: 未找到命令,安装docker-compose
  6. windows系统下.NET CORE c# 通过bat脚本发布iis应用程序,半智能点击式ci/cd
  7. AI 绘画极简教程
  8. 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明
  9. JsonPath:针对json的强大的规则解析与参数查找工具
  10. Oracle,SAP等暂停俄所有业务,国产化刻不容缓,无代码又该如何发力