一:
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退出时,如果还运行着子线程,会怎么样?