qt调用quit()后未结束线程解决方案

正常操作

正常写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也不会让程序崩溃了。

qt调用quit()后未结束线程解决方案

上一篇:跨平台移动开发phonegap/cordova 3.3全系列教程-结合asp.net/jqmboile


下一篇:Python--一个文件被重复import的问题?