QThread线程退出

7 篇文章 0 订阅
文章讨论了使用Qt进行多线程编程时,如何在主线程中启动和管理子线程,以及在不同情况下关闭线程和可能遇到的问题,如提前销毁QThread对象可能导致的内存问题。
摘要由CSDN通过智能技术生成

一:

void MainWindow::on_pushButton_clicked()
{
    qDebug() << "主线程id:" << QThread::currentThreadId();
    thread=new workThread;
    thread->start();
    connect(thread,&workThread::finished,thread,&workThread::deleteLater);
}
workThread::~workThread()
{
    qDebug()<<"~workThread()";
}


void workThread::run()
{
    qDebug() << "当前子线程ID:" << QThread::currentThreadId();
    QThread::sleep(10);
    qDebug() << "子线程结束:" << QThread::currentThreadId();
}

(1) 

按下按钮,等待子线程结束:

主线程id: 0x4650

当前子线程ID: 0x4724

子线程结束: 0x4724

~workThread()

等待run()函数运行结束,子线程发出finished()信号,thread对象调用deletelater(),析构。 

(2) 

按下按钮,在子线程未结束时,关闭窗体。

这时候不知道子线程是什么情况???

分析:

这种情况:关闭窗体时,thread对象没有销毁。

然后:thread.exe exited with code 0

(有点像内存泄漏,但操作系统在exe关闭后,thread应该会回收)

二: 

void MainWindow::on_pushButton_clicked()
{
    qDebug() << "主线程id:" << QThread::currentThreadId();
    thread=new workThread(this);
    thread->start();
    connect(thread,&workThread::finished,thread,&workThread::deleteLater);
}

如果写成上面这样:

thread=new workThread(this);

按下按钮,在子线程未结束时,关闭窗体。 

QThread: Destroyed while thread is still running

就是子线程还在运行呢,但QThread对象已经销毁了。 

Qt多线程的两种创建方法以及快速停止线程方法_qt 结束正在运行的线程-CSDN博客

子线程停止标志是run()函数运行结束

真正停止还是需要等run()函数执行完毕

困惑的点:

当exe退出时,如果还运行着子线程,会怎么样? 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值