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。这样就将串行的操作改为并行执行,能极大的缩短应用程序退出所需要的时间。

  • 相关阅读:
    css-断网图片加载失败,图片表情与文字对齐
    工作中遇到一些不会写的样式
    基础知识题目
    前端基础知识html css
    js match
    jquery.extend()与jquery.fn.extend()的区别
    js apply 与 call
    jdk安装
    js数组操作各种方法
    js获取日期
  • 原文地址:https://www.cnblogs.com/ityujian/p/3137114.html
Copyright © 2011-2022 走看看