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

  • 相关阅读:
    2020/10/29
    2020/10/24
    2020/10/28
    2020/10/31周报
    linux shell 中判断字符串为空的正确方法
    20201107 千锤百炼软工人
    20201103 千锤百炼软工人
    20201109 千锤百炼软工人
    20201111 千锤百炼软工人
    20201105 千锤百炼软工人
  • 原文地址:https://www.cnblogs.com/ityujian/p/3137114.html
Copyright © 2011-2022 走看看