• 131阅读
  • 0回复

记一次Qt视频监控系统的优化/双击打开分组可能崩溃的BUG/排对打开通道过程中关闭通道可能崩溃的BUG [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 前天 14:18

以前视频监控系统就做了双击打开分组的功能,但是现场也好和本地实际测试也好,都没有出现过问题,而近期在一个集团中测试下来,在双击打开分组的时候很容易蹦,一看每次都是64路同时打开,经常详细测试,发现问题出在两个现象才会发生,一个是分组中有部分通道是离线的,一个是上一个分组还没有全部打开完成,下一个双击触发又开始了,这两者杂交,必触发崩溃,核心就是锁资源竞争了,调用关闭和打开并不是在同一个线程完成的,于是把双击分组的打开也放到videomanage线程处理,其实内部是排队打开,默认间隔0.1s,也可以是0.01s,间隔越短,瞬间占用的CPU越大,如果电脑配置比较好,设置成0也可以可以的,也就是64个通道同时瞬间打开。

最关键的是要在下次分组打开的时候,判断下是不是上一个分组还没有打开完成,如果没有打开完成,就不用继续,排队打开的时候会记住一个索引,当前打开到哪个通道,如果到了末尾说明全部打开完成,这样再去关闭所有通道再打开下一个分组的视频,就可以了。注意这里的打开完成,并不是要画面都出来,因为通道可能离线,而是采集线程开始采集就可以,无需等待采集到画面。经过这几个改进之后,无论怎么双击怎么多少个通道怎么有离线夹杂其中,都不会再崩溃了。顺带把轮询中的打开也改成了视频管理线程去排队打开,效果非常的棒。离完美又更近了一步。

欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个