1、QThread安全退出
线程创建以及退出示例
创建
TestObject* object = new TestObject;
QThread* thread = new QThread;
object->moveToThread(thread );
connect(thread,&QThread::finished,object,&TestObject::deleteLater); // 退出后释放TestObject对象资源
connect(thread,&QThread::finished,thread,&QThread::deleteLater); // 退出后释放QThread对象资源
thread->start();
退出
thread->quit(); // 也可以使用thread->exit(0);
thread->wait();
thread = nullptr;
object = nullptr;
2、QThread类的finished信号
thread->start();调用的函数完成后才会发出finished信号。可以是QThread::Run函数,也可以是自己定义类TestObject::ABC的Run函数完成退出后发出finished信号。
/******************************
QThread* th=new QThread();
Work* work=new Work();
work->moveToThread(th);
work->start();
MySig ms; //ms局部变量栈自动释放,用来向work发送信号执行异步线程工作 connect(th, &QThread::finished, work, &QObject::deleteLater);//线程结束释放工作类 connect(th, &QThread::finished, th, &QObject::deleteLater);//线程结束释放线程指针 QObject::connect(work,&Work::SigExitThread,th,&QThread::exit);//退出线程,work类中声明一个信号,用来触发线程退出的,这个信号一般是在work中函数执行完毕时发送,可以放在Fun1的函数结尾 QObject::connect(&ms,&MySig::Sig_WorkFunc1,work,&Work::Func1);