zoukankan      html  css  js  c++  java
  • 多线程退出优化

    监控客户端支持同时播放最大8路视频,每个设备有个CCamera类对其进行抽象,CCamera中有工作线程进行视频收发和任务异步执行操作。如果需要退出应用程序时,首先需要对各个CCamera对象依次进行如下操作:
    永久激活CloseEvent,不在接受新得任务请求。
    停止接受视频数据,断开和设备的网络连接
    清除队列中的帧数据
    清除未完成的任务

    最初设计是串行执行的,如果同时播放8路视频,需要依次对Camera进行如下操作。退出应用程序时耗时较长,容易出问题。
    参考eMule删除任务的通知方式,将在CCamera对象销毁之前先调用一次NotifyClose(),在该函数中激活CloseEvent。工程线程一直在使用WaitForMultiObjects等待CloseEvent、TaskEvent等。如果CloseEvent被触发,工作线程将调用函数去执行”断开和设备的视频连接”、”清除队列中的帧数据”、”清除未完成的任务”等操作。

    这样再释放所有CCamera之前,先依次调用一遍NotifyClose通知各个Camera进行关闭处理,具体关闭处理由各个工作线程完成。然后再依次释放CCamera。这样就将串行的操作改为并行执行,能极大的缩短应用程序退出所需要的时间。

  • 相关阅读:
    MySQL基础知识总结
    PHP常见算法
    PHP程序功能设计
    SVN配置使用及移植
    推荐一个SpringBoot + Vue + MyBatis 音乐网站项目
    累积sql常用查询语句「Oracle」
    Nginx服务器设置http/https正向代理,使用ngx_http_proxy_connect_module模块
    squid配置文件
    nginx命令
    k8s与Docker有啥关系
  • 原文地址:https://www.cnblogs.com/ityujian/p/3137114.html
Copyright © 2011-2022 走看看