目录
二.requestInterruption() + isInterruptionRequested()
如果一个线程运行完成,就会结束。可很多情况并非这么简单,由于某种特殊原因,当线程还未执行完时,我们就想中止它。
不恰当的中止往往会引起一些未知错误。比如:当关闭主界面的时候,很有可能次线程正在运行,这时,就会出现如下提示:
QThread: Destroyed while thread is still running
这个问题在使用线程的过程中经常遇到,尤其是耗时操作。
大多数情况下,当程序退出时,子线程也许会正常退出。这时,虽然抱着侥幸心理,但隐患依然存在,也许在极少数情况下,就会出现Crash。
所以,我们应该采取合理的措施来优雅地结束线程,一般思路:
1.发起线程退出操作,如果线程通过exec()开启了事件循环,退出时还得调用quit()或exit();
2.等待线程完全停止,删除创建在堆上的对象;
3.适当的使用wait(),用于等待线程的退出。
线程退出时,不建议直接调用terminate()强制终止。关于void QThread::terminate(),Qt Assistant中有如下介绍
终止线程的执行。根据操作系统的调度策略,线程可能会立即终止,也可能不会立即终止。