Qt中关于Qfuture线程销毁问题

Qt中关于Qfuture线程销毁问题

在这里我遇到一个由于子线程语句错误导致的程序中断问题,我的线程布置为:主线程中启动一个一级子线程,然后一级子线程中套用三个并行二级子线程(目前运行没有发现问题,因此我推测对于Qfuture来说,线程是可以套用的,网上实在查找不到这方面的知识),主线程需要等待一级子线程结束后再循环开启新的一级子线程,然后如此循环下去。一级子线程中出错导致主线程等待一个被销毁的线程,所以整个程序崩溃。

这是我整个问题的示意图
Qt中关于Qfuture线程销毁问题
前面说了我的主线程需要等待一级子线程的结束,我第一次采取的方式为使用QfutureWatcher来监视线程,线程完成后再开启新的一级子线程(Qfuture结束后自动销毁),这里由于子线程遇到语句错误被强制销毁,导致watcher认为子线程是正常结束后自动销毁的,于是触发槽函数开启了新的一级子线程,导致整个程序时序混乱,进而程序崩溃掉。

我第二次采取的方式为使用waitforfinished来等待,又会出现线程在等待过程中被销毁的现象,这在Qt中同样是不允许的,也会导致程序崩溃。(但在此处得到了启发,因为网上很多少人说Qfuture线程是不可以主动被取消的,但是他却有cancel方法,这里设想的通过下述流程不就可以测试出用cancel到底是否可以主动强制销毁Qfuture了嘛)
Qt中关于Qfuture线程销毁问题
问题的解决很简单(将语句错误修正即可),但调试过程中踩了很多坑,因为网上对于Qt的资料实在是少之又少,所以分享出来大家一起讨论,如有错误还请各位批评指正

本文原创,如有转载请注明出处。