QThread对象销毁问题

暴雨中漫步 2017-07-03 11:31:15
应用场景:一个线程调用一个函数,在该函数中通过new一个新的线程对象并start(),然后该函数返回。当新new出的线程run()结束后,如何销毁线程对象。我在run()函数结束前加了delete this,但是报QMutex异常错误。跪求大师指点,此种应用场景应如何销毁对象,防止内存泄漏。
...全文
1132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小岗哥哥 2020-03-10
  • 打赏
  • 举报
回复
引用 4 楼 莫名其妙的摩羯座 的回复:
[quote=引用 2 楼 军神关云长 的回复:]
QThread *thread = new QThread(this);
connect(thread, SIGNAL(finished()),thread ,SLOT(deleteLater()));
将线程的结束信号与deleteLater())槽相关联,当线程结束时会delete掉

如果是在一个子线程里在开启一个临时线程,通过这样的手段好像解决不了![/quote]
我现在发现你说的这个问题了
我在一个线程的run函数的循环中 ,条件满足去new一个临时线程,这个线程的构造函数里关联了信号槽deleter,同时回传线程id,在主线程内存入Qmap,发现线程退出以后,map里的new的对象的内存地址还在,就说明没有删除掉?
抓紧猪尾巴 2019-07-29
  • 打赏
  • 举报
回复
引用 4 楼 莫名其妙的摩羯座 的回复:
[quote=引用 2 楼 军神关云长 的回复:]
QThread *thread = new QThread(this);
connect(thread, SIGNAL(finished()),thread ,SLOT(deleteLater()));
将线程的结束信号与deleteLater())槽相关联,当线程结束时会delete掉

如果是在一个子线程里在开启一个临时线程,通过这样的手段好像解决不了![/quote]有什么好的方法吗
  • 打赏
  • 举报
回复
引用 2 楼 军神关云长 的回复:
QThread *thread = new QThread(this);
connect(thread, SIGNAL(finished()),thread ,SLOT(deleteLater()));
将线程的结束信号与deleteLater())槽相关联,当线程结束时会delete掉

如果是在一个子线程里在开启一个临时线程,通过这样的手段好像解决不了!
onlylovercl 2017-07-04
  • 打赏
  • 举报
回复
1.主线程中可以查询子线程是否在运行中,若没有运行,则可以销毁该指针 2.2楼的方法可行;
暴雨中漫步 2017-07-03
  • 打赏
  • 举报
回复
主线程启动一个超时检测线程,超时线程进行结果检查,规定时间内收到结果返回成功,超时返回失败。主线程启动完超时检测线程后,就去处理其他业务了。超时线程对象如何回收?
  • 打赏
  • 举报
回复
QThread *thread = new QThread(this); connect(thread, SIGNAL(finished()),thread ,SLOT(deleteLater())); 将线程的结束信号与deleteLater())槽相关联,当线程结束时会delete掉

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧