QFuture.isFinished()为true,QFuture.waitForFinished()竟然报错
注意可能存在QFuture.isFinished()为true,QFuture.waitForFinished()报错的情况。
原因可能是QtConcurrent::run()的函数没有正确退出造成。
【具体过程如下】
QtConcurrent::run()执行了一个相机拉流的死循环,条件如下(相机是否在拉流)
当停止拉流,上述条件变为false
按理说死循环退出,函数就结束了。而且确定QFuture.isFinished()为true了,但是QFuture.waitForFinished()竟然报错。
也就是说,isFinished()不是真正的正确结束了???
最终定位到下述这行代码
在while外加锁后,QFuture.waitForFinished()不再报错。肯能因为m_ptrGrabResult有缓存和读写冲突。
【多余的话】
QFuture.waitForFinished()太容易报错了,有时候不崩溃,但是try catch可以捕获到。不写waitForFinished()就没事。
【参考】
QT高级线程API总结(四)QFuture_ONE米球兔的博客-CSDN博客_qfuture