日志异步工作器的实现
/*实现异步工作器*/
#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