注意可能存在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