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

 

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