Locker

C#单例模式

时间秒杀一切 提交于 2020-08-17 02:28:35
#region 单线程 单例 public class Singleton { private static Singleton uniqueInstance; //定义私有构造函数,外界不能创建该实例 private Singleton() { } //定义一个公有方法,提供一个全局访问点 public static Singleton GetInstance() { if (uniqueInstance == null) uniqueInstance = new Singleton(); return uniqueInstance; } } #endregion #region 多线程单例 public class Singleton { // 定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; //定义一个标识,确保线程同步 private static readonly object locker = new object(); // 定义私有构造函数,使外界不能创建该类实例 private Singleton() { } //定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点 public static Singleton GetInstance() { // 当第一个线程运行到这里时

Qt编写安防视频监控系统29-掉线重连

自古美人都是妖i 提交于 2020-08-15 05:33:35
一、前言 掉线重连在很早很早以前就做了,基本上的方法都是搞个变量存储最后收到图片的时间,然后开个定时器判断,如果不在暂停模式下,当前时间和最后收到图片的时间差值超过了设定的超时时间,比如5s则认为掉线,然后调用close方法关闭,调用open重新打开视频流,依次重复。 最开始做的时候就发现如果这个最后收到图片的时间更新在视频流控件的widget中,时间久了会假死,明明还在绘制中,但是此时间不会更新,网上也看到有些人遇到了类似的问题,后面把此变量移到解码采集线程中,才正常,正确的做法也是必须放到采集线程才是对的,毕竟硬解码opengl显示以后,和painter就没啥关系了,或者视频流交给句柄以后,也跟painter没啥关系,必须从源头处理才对。 视频流控件自带了自动重连的机制,这样用户再使用的时候不用管如何重连,只需要开启自动重连属性即可,默认开,还有一种情况可能要关闭自动重连属性,比如播放本地视频文件,有时候只需要播放一次就行,不需要播放完成以后又重新播放,如果确实需要,则关联播放完毕信号自行重新open即可。 在具体的使用过程中发现,在视频监控系统中,比如有16个通道,如果自动重连在单个的视频流控件中,则会出现一种情况,网络断了,然后又恢复了,则16个通道很可能在同一时间瞬间恢复,此时CPU和内存暴增,甚至出现过程序崩溃的情况,那怎么搞呢

最新开源 | 人脸识别应用套件:毫秒级离线识别 适用多类场景

六眼飞鱼酱① 提交于 2020-08-14 03:18:40
随着人脸识别技术的不断发展,尤其是在部分算法平台对外开放算法之后,人脸识别的应用门槛得到了极大降低。但是从算法到一款真正可落地的人脸识别产品,在完整的应用开发中,不仅需要考虑底层算法的运行逻辑,也需要上层业务逻辑完整自洽。而这个从0到1的过程,往往会让大部分中下企业及开发者,在项目商用化落地过程中无从下手。 因此,在这里推荐一款开源的人脸识别应用套件ArcFaceGo。基于该套件,可以快速甚至零代码搭建人脸识别闸机通行、刷脸考勤以及近来大火的人脸识别测温等应用。同时,利用它的开源属性,也完全能够在此基础上开发成一款符合自身业务需求的产品,并投入商用。 【简单易用 ArcFaceGo****应用套件构成】 在应用套件中,已经内置了虹软视觉开放平台的离线人脸识别SDK。涵盖人脸检测、人脸比对、活体检测、人脸属性分析等一系列核心算法,即使无网络状态下也可以运行。在虹软视觉开放平台完成下载后,可以看到该应用套件由人脸识别软件APK、中心管理端两部分构成。 **中心管理端:**拥有人员注册、考勤统计、出入查询等功能,也可以云端进一步对接已有的业务平台。 人脸识别设备端应用APK **:**负责采集人脸信息、进行身份比对,并向中心管理端报备识别结果以及通知相关联通控制器。在该部分其代码中,已经针对人脸检测、人脸比对、活体检测等算法,模块化的集成了相应算法运转逻辑

threading.local()使用与原理剖析

纵然是瞬间 提交于 2020-08-14 03:16:15
threading.local()使用与原理剖析 前言    还是第一次摘出某个方法来专门写一篇随笔,哈哈哈。    为什么要写这个方法呢?因为它确实太重要了,包括后期的 Flask 框架源码中都有它的影子。    那么我们就来瞄一眼这个东西是啥吧。 作用    在Python官方中文文档中(Python3.8.4),对它的介绍其实并不是很详细    其实他的功能非常简单,如下:    在一个全局的容器中可以存放一些线程独有的数据,这些数据应是某一线程私有的,是除了本线程外的其他线程访问不到的。    举个例子,例如你用迅雷下载的时候每条线程的下载进度不一样,我们需要将下载进度这个数据存储起来,怎么存储?自己创建一个具有线程安全性的列表或字典?那太麻烦了, 请记住一点,数据怎么存不重要,关键是要方便取,取的快,取的准才是王道 ,所以直接用 thrading.local() 方法即可。    我来画一张吧,灵魂画师上线,能用图描述绝对不打字。 基本使用    threading.local() :可以实例化出一个寄存柜,这个寄存柜是全局化的    寄存柜对象.你想放的东西名字 = 东西 :你可以在线程中这样放入一个独有的物件    寄存柜对象.你放过的东西的名字 :这样,你就可以将你存放进的东西拿出来。注意,只有你才能拿出来,其他人拿不了。 import threading

kafka和rocketmq的比较差异

☆樱花仙子☆ 提交于 2020-08-09 05:56:41
rocketmq 的注册中心是基于 NameService 的,而 kafka 的注册中心是基于 zk 的 NameService 没有 zk 的功能丰富,从组件上来说它更轻量级 NameService 没有监听机制,它通过心跳来维护自己与 broker 之间的联系 Zk 的实现是通过一个持久节点 locker 节点来创建临时节点 znode ,并且 zk 的特性是是强一致性的,生成的 znode 是有序自增的 Zk 通过创建监听比自己小的节点,和惊群效应实现 NameService 存储的是 topic 和 broker 的映射关系,数据存储不复杂 Kafka 在数据可靠性上不如 rocketmq Kafka 支持异步刷盘和异步复制, rocketmq 支持同步异步刷盘、同步异步复制 数据传输量上 kafka 优于 rocketmq Kafka 的数据传输是百万级别的,单点的 rocketmq 的传输速率是 7 万左右的水平 Kafka 数据传输效率高的一个特点是基于磁盘顺序写 第二个特点 kafka 在发送消息到 broker 时,是基于一个批量发送的理念(巧妙的利用了磁盘 I/O 的原理,减少磁盘 IO 次数,提高效率)。这样的好处是一次发送的量大 坏处是增大了消息丢失的风险,并且在发送前会堆积大量的缓存,容易对 gc 造成压力 Kafka 和 rocketmq

频繁操作本地缓存导致YGC耗时过长

倖福魔咒の 提交于 2020-08-06 09:59:18
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 概述 今天要说的这个问题,是我经常面试问的一个问题,只是和我之前排查过的场景有些区别,属于另外一种情况。也许我这里讲了这个之后,会成为不少公司JVM必问之题,所以本文还是值得大家好好看看的,相信也会让你很有收获,我把这个问题简单归纳为Hotspot GC研发工程师也许漏掉了一块逻辑。 如下图所示,在上一次YGC之后,from space的使用率是12%,但是在下一次YGC准备发生的时候,发现from space的使用率变成了99%。 OK,看到这里,请停下来思考10秒钟,想想这个现象是否正常。 如果你觉得这个现象不正常,说明你对JVM内存分析有一定的理解,但还是没有完全理解。 如果你觉得这个现象没问题,绝大部分说明你对JVM内存分配还不够熟悉,极少部分情况说明你对它已经非常熟悉了,对它实现上的优缺点都了如指掌了。 那请问你是属于哪种呢? 其实简化下来的问题就是: 非GC过程中,新创建的对象可能在from space里分配吗? JVM内存分配 JVM内存分配说简单也简单,说复杂也复杂,不过我这里不打算说很细,因为要扯开讲,基本可以讲几个小时,我这里只挑大家熟知的来聊。暂时把大家归结为上面的第一种情况。 大家知道Java Heap主要由新生代和老生代组成,而新生代又分别由eden+s0(from space)+s1(to

Qt日志重定向qInstallMessageHandler,输出至文件及网络

泄露秘密 提交于 2020-05-05 15:41:04
Qt日志重定向qInstallMessageHandler,输出至文件及网络 https://blog.csdn.net/libaineu2004/article/details/88801336 Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。 qDebug:调试信息 qWarning:警告信息 qInfo:警告信息 qCritical:严重错误 qFatal:致命错误 Qt4提供了qInstallMsgHandler(Qt5:qInstallMessageHandler)对qDebug、qWarning、qCritical、qFatal等函数输出信息的重定向处理。 qInstallMsgHandler是一个回调函数,由qDebug、qWarnng、qCritical、qFatal函数进行触发,qDebug、qWarnng、qCritical、qFatal函数处理的消息文本会被qInstallMsgHandler所指向的回调函数截获,允许用户自己来处理输出的消息文本。 一、来看官方的例子: void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString text; switch(type) { case

使用asp.net core 3.0 搭建智能小车2

我是研究僧i 提交于 2020-05-05 15:00:40
  上一篇中我们把基本的运行环境搭建完成了,这一篇中,我们实战通过树莓派B+连接HC-SR04超声波测距传感器,用c# GPIO控制传感器完成距离测定,并将距离显示在网页上. 1.HC-SR04接线    传感器如下图:      HC-SR04 模块可以测量 3cm – 4m 的距离,精确度可以达到 3mm.这个模块包括 超声波发射器、超声波接收器和控制电路三部分.该传感器有4个引脚:   VCC, 超声波模块电源脚,接5V电源即可   Trig, 超声波发送脚   Echo,超声波接收检测脚   GND,接地 1.1HC-SR04超声波模块工作原理:   (1) 树莓派向 Trig 脚发送一个至少 10us 的脉冲信号。   (2) HC-SR04 接收到信号,开始发送超声波,并把 Echo置为高电平,然后准备接收返回的超声波   (3) HC-SR04 接收到返回的超声波,把 Echo 置为低电平。   (4) Echo 高电平持续的时间就是超声波从发射到返回的时间间隔。   (5) 计算距离:距离(单位:m) = (start - end) * 声波速度 / 2 1.2 接线 4 个引脚由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成。   Vcc 和 Gnd 接 5v DC 电源,但不推荐用独立电源给它供电,应使用树莓派的 GPIO

C#基于接口设计三层架构Unity篇

吃可爱长大的小学妹 提交于 2020-04-27 22:35:57
一、引言 面向接口(抽象)编程,是为了降低程序的耦合度,符合依赖倒置原则。因此典型的三层架构UI、BLL、DAL基于接口设计后,会拓展成UI、IBLL、BLL、IDAL、DAL。在上一篇《 C# IoC学习笔记 》中我们可以了解到,控制反转(IoC)使对象的创建交给了第三方IoC容器如Unity。利用Unity的IoC功能,可以对基于接口设计的三层架构做进一步的升级,搭建一个更容易实现的可配置可扩展的三层架构;利用Unity的AOP功能,使框架更加的简洁,因为它抽出了框架的公共逻辑部分。 二、项目建立 2.1、项目建立 依次新建项目UI(Client)、IBLL、BLL、IDAL、DAL、Model、Common。 2.2项目说明 三、项目之间的引用关系 3.1、对着项目名称右键->添加->引用->项目,添加各个项目的引用。 3.2、引用说明 四、项目需安装的NuGet包 五、注意事项 对Unity容器的IoC调用进行封装,Container应封装成 单例模式 以提高效率,此处使用MemoryCache。 5.1、在Common项目引用System.Runtime.Caching.dll,并在Helper文件夹下新建一个缓存帮助类:MemoryCacheHelper.cs。 /// <summary> /// 内存缓存帮助类,支持绝对过期时间、滑动过期时间、文件依赖三种缓存方式。

Qt开源作品1-视频流播放ffmpeg内核

你离开我真会死。 提交于 2020-04-24 16:04:11
一、前言 好久以前就写过这个工具,后来因为Qt版本的不断升级以及ffmpeg也经历过好多次的迭代,可能从官网下载的ffmpeg搭配原来的代码不能正确编译,因为很多api已经变了,所以这次特意抽空全部整理重写一遍,只求最精简最好用,同时兼容了ffmpeg3和ffmpeg4,并且同时支持32位的库和64位的库,这样任何小白拿过去直接编译就能用。 多线程实时绘制 同时解码视频流和音频流 支持任意Qt版本任意系统任意编译器 解码和窗体分离,拓展性强 可选ffmpeg3和ffmpeg4两个版本 可选32位和64位的ffmpeg库 注释绝对详细,包你满意 二、代码思路 第一步:引入ffmpeg的头文件 //必须加以下内容,否则编译不能通过,为了兼容C和C99标准 #ifndef INT64_C #define INT64_C #define UINT64_C #endif //引入ffmpeg头文件 extern "C" { #include "libavutil/opt.h" #include "libavutil/time.h" #include "libavutil/frame.h" #include "libavutil/pixdesc.h" #include "libavutil/avassert.h" #include "libavutil/imgutils.h" #include