首页 > 其他分享 >日志异步工作器的实现

日志异步工作器的实现

时间:2023-08-25 10:06:26浏览次数:25  
标签:std 异步 实现 void 工作 __ 日志 include

日志异步工作器的实现

/*实现异步工作器*/
#ifndef __M_LOOPER_H__
#define __M_LOOPER_H__
#include <mutex>
#include <thread>
#include <condition_variable> //条件变量
#include "buffer.hpp"
#include <functional>
#include <memory>

namespace nmzlog
{
    // 异步工作器
    class AsyncLooper
    {
        // 定义一个function类型
        using Functor = std::function<void(Buffer &)>; // 定义一个函数指针的类型
    public:
        // 构造函数
        AsyncLooper() {}
        using ptr = std::shared_ptr<AsyncLooper>; // 定义一个只能指针类型
        void stop();
        // 提供数据
        void push(const char *data, size_t len); // 不断新增,扩容的时候就不断添加到内存中,如果是固定大小就会阻塞
    private:
        // 回调函数
        Functor _callBack;//具体对缓冲区数据进行处理的回调函数,由异步工作器使用者来传入

    private:
        // 线程的入口函数
        void threadEntry();

    private:
        bool _stop;        // 工作器停止标志,是否停止异步工作器,是true,否false
        Buffer _pro_buf;   // 生产缓冲区
        Buffer _con_buf;   // 消费缓冲区
        std::mutex _mutex; // 互斥锁保证安全
        // 条件变量头文件condition_variable
        //  两个条件变量,会提供两个pcb的等待队列
        std::condition_variable _cond_pro; // 生产者的等待队列的条件变量
        std::condition_variable _cond_con; //
        std::thread _thread;               // 异步工作器对应的工作线程
    };
}
#endif

标签:std,异步,实现,void,工作,__,日志,include
From: https://blog.51cto.com/u_15562309/7226287

相关文章

  • redis实现用于限制非法登录
    redis实现用于限制非法登录次数为5次,锁定10分钟,并设置登录连接超时时间为10分钟要使用Redis实现限制非法登录次数、锁定和设置登录连接超时时间,可以结合Redis的计数器(counter)、设置过期时间(expire)和获取剩余有效时间(ttl)的功能。下面是一个示例的Java代码,使用Redis来实现这......
  • 说一下 HashMap 的实现原理?
    HashMap是Java集合框架中的一个重要类,用于存储键值对。它的实现基于哈希表(HashTable)数据结构,其基本原理是通过将键映射到一个索引,然后在该索引位置存储对应的值。以下是HashMap的主要实现原理:哈希函数:当你向HashMap中添加键值对时,首先会将键通过哈希函数转换成一个整数,该......
  • QT实现多语言详细步骤
    1、设置.pro项目配置TRANSLATIONS+=Language_zh_CN.ts\Language_en_CN.tsLanguage_zh_CN代表中文,Language_en_CN代表英文2、设计相关界面,如果要翻译程序中的文本,需要将程序中的文本进行修改Qttr()和qsTr()标记待翻译字符串3、生成相关的.ts文件在项目目录下自动生成相关的.t......
  • docker 清除日志文件
    查看日志大小:在linux系统中创建docker_logs.sh文件,输入sh docker_logs.sh命令查看日志文件大小/var/lib/docker/containers为docker默认日志输出路径echo"========dockercontainerslogsfilesize========"logs=$(find/var/lib/docker/containers/-name*-json.log)......
  • C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密
    C# 实现国密SM4/ECB/PKCS7Padding对称加密解密,为了演示方便本问使用的是VisualStudio2022来构建代码的1、新建项目,之后选择项目鼠标右键选择 管理NuGet程序包管理,输入 BouncyCastle回车添加BouncyCastle程序包 2、代码如下:CBC模式byt......
  • VisionPro C#混合编程实现工业相机实时图像采集
    1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Linq;7usingSystem.Text;8usingSystem.Windows.Forms;9usingCognex.VisionPro;10usingC......
  • 大学生创新训练项目开发日志 (8-14 ~ 8-24)
    技术路线利用Xposed模块在应用加载app包时将获取到的软件资源打上包名标记后上传到内网服务器。实现流程初次尝试实现IXposedHookLoadPackage的handleLoadPackage方法。publicvoidhandleLoadPackage(finalLoadPackageParamlpparam)throwsThrowable{XposedB......
  • 登录和注册功能的实现
    本来使用flask框架制作网页并实现登录和注册在几天前就已经实现了,不过当时没有设计到一些数据库之间的关联,而且使用了的是pymysql并且反复的打开数据库的方式。现在这次使用的是数据库池的方式,然后不同的数据库之间也设定了外键。importpymysqlfromdbutils.pooled_dbimport......
  • qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器
    qBittorrent如何运行脚本BT实现自动改名并方便Jellyfin的搜刮器很多影视网站下载的视频名字大概是为了规避监测,命名非常奇葩,比如:z灼f流,y骨y等等。如果你使用了Jellyfin,Emby又或者是其他视频管理软件,搜刮器就会搜不到相应的电视剧的介绍,图片和字幕了,但是40多集电视剧每一集......
  • filebeat 配置采集nginx 日志
    filebeat配置nginx日志采集filebeat采集需求1.需要将以往30天的日志输出到es,并且以时间按天展示2.将不同的时间字段解析出来,输出到esnginx配置json日志log_formatlog_json'{"remoteAddr":"$clientRealIp",''"date_timeLocal":"$time_local",......