qt调用quit()后未结束线程解决方案
2024-10-19 15:37:35
正常操作
正常写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也不会让程序崩溃了。
最新文章
- php ajax请求和返回
- 002-添加网站ico图标
- maven 打包 xml文件
- js拆分数组
- SQL Server练习
- 15个必须知道的chrome开发者技巧(转)
- arcgis直连oracle
- 【js】正则表达式豁然开朗
- [改善Java代码]不推荐使用binarySearch对列表进行检索
- Android ListView相关 头和尾 headView footerView
- android反编译工具 ApkDec-Release-0.1
- mac系统奔溃无法启动时,如何备份重要资料
- atitit.ajax bp dwr 3.该票据安排使用的流量汇总 VO9o.....
- 关于hasnextLine()方法的一些理解
- C++ 初步
- Beta(1/7)
- ubuntu安装zabbix 3.2(转)
- python 验证码识别
- Mybatis运行错误:信息: SQLErrorCodes loaded: [DB2, Derby, H2, HDB, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
- Qt5模型/视图结构-视图(View)
热门文章
- 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合
- 一、shell编程与变量
- leetcode题解#3:无重复字符的最长子串
- application.yml 常用基本配置
- docker-compose: 未找到命令,安装docker-compose
- windows系统下.NET CORE c# 通过bat脚本发布iis应用程序,半智能点击式ci/cd
- AI 绘画极简教程
- 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明
- JsonPath:针对json的强大的规则解析与参数查找工具
- Oracle,SAP等暂停俄所有业务,国产化刻不容缓,无代码又该如何发力