QFuture.isFinished()为true,QFuture.waitForFinished()竟然报错

注意可能存在QFuture.isFinished()为true,QFuture.waitForFinished()报错的情况。

原因可能是QtConcurrent::run()的函数没有正确退出造成。

【具体过程如下】

QtConcurrent::run()执行了一个相机拉流的死循环,条件如下(相机是否在拉流)

当停止拉流,上述条件变为false

按理说死循环退出,函数就结束了。而且确定QFuture.isFinished()为true了,但是QFuture.waitForFinished()竟然报错。

也就是说,isFinished()不是真正的正确结束了???

最终定位到下述这行代码

 当把它也写到if条件中后,QFuture.waitForFinished()不再报错。

if (m_baslerCamera->RetrieveResult(5000, m_ptrGrabResult, TimeoutHandling_Return) && m_ptrGrabResult->GrabSucceeded() )

【多余的话】

QFuture.waitForFinished()太容易报错了,有时候不崩溃,但是try catch可以捕获到。不写waitForFinished()就没事。

【参考】

QT高级线程API总结(四)QFuture_ONE米球兔的博客-CSDN博客_qfuture

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章