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 @   夕西行  阅读(673)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-09-22 2、持续监听客户端的信息
点击右上角即可分享
微信分享提示