当前位置 : 主页 > 编程语言 > c语言 >

日志异步工作器的实现

来源:互联网 收集:自由互联 发布时间:2023-08-25
日志异步工作器的实现 /*实现异步工作器*/#ifndef __M_LOOPER_H__#define __M_LOOPER_H__#include mutex#include thread#include condition_variable //条件变量#include buffer.hpp#include functional#include memorynamespace nmzlog

日志异步工作器的实现

/*实现异步工作器*/
#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
【感谢龙石为本站提供数据采集系统 http://www.longshidata.com/pages/government.html 】
上一篇:AsyncMessenger
下一篇:没有了
网友评论