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

 

posted @ 2022-09-22 14:55  夕西行  阅读(519)  评论(0编辑  收藏  举报