当前位置: 首页 > news >正文

C++【日志模块中的writer类】前文中 循环队列用法

用到前文中的循环队列模板

/*
**  File name:   LogWriter.h
**  Author:      
**  Date:        2024-11-4
**  Brief:       日志写入类
**  Note:        日志写入类,负责将日志写入文件和连接客户端。
**  Copyright (C) 1392019713@qq.com All rights reserved.
*/
#pragma once#include "../../Algorithm/Include/LoopQueue.h"
#include "../../System/Include/Singleton.h"
#include "LogStream.h"
#include <string>
#include <thread>class CByteArray
{
public:CByteArray();~CByteArray();public:std::string m_strMsg;
};class CLogWriter
{DECLARE_UNMANGED_SINGLETON_X(CLogWriter)
private:CLogWriter();public:~CLogWriter();bool WriteLog(const CByteArray& rByteArray);void SetRunning(bool bIsRunning);bool IsRunning() const;void StartWriteFileThread();void StartWriteRemoteThread();static void WriteFileThreadFunc(CLogWriter* pLogWriter);static void WriteRemoteThreadFunc(CLogWriter* pLogWriter);private:std::unique_ptr<std::thread> m_pWriteFileThread;CLoopQueue<CByteArray> m_writeFileloopQueue;std::unique_ptr<std::thread> m_pWriteRemoteThread;CLoopQueue<CByteArray> m_writeRemoteloopQueue;bool m_bIsRunning;
};
#include "../Include/LogWriter.h"
#include <fstream>IMPLEMENT_UNMANED_SINGLETON_X(CLogWriter)CByteArray::CByteArray()
{}CByteArray::~CByteArray()
{}/// /CLogWriter::CLogWriter()
{m_bIsRunning = true;m_writeFileloopQueue.Create(100);
}CLogWriter::~CLogWriter()
{m_bIsRunning = false;m_pWriteFileThread->join();//m_pWriteRemoteThread->join();
}bool CLogWriter::WriteLog(const CByteArray& rByteArray)
{bool bRet = m_writeFileloopQueue.EnQueue(rByteArray);if (!bRet){return false;}bRet = m_writeRemoteloopQueue.EnQueue(rByteArray);if (!bRet){return false;}return true;
}void CLogWriter::SetRunning(bool bIsRunning)
{m_bIsRunning = bIsRunning;
}bool CLogWriter::IsRunning() const
{return m_bIsRunning;
}void CLogWriter::StartWriteFileThread()
{m_pWriteFileThread = std::make_unique<std::thread>(&CLogWriter::WriteFileThreadFunc, this);
}void CLogWriter::StartWriteRemoteThread()
{}void CLogWriter::WriteFileThreadFunc(CLogWriter* pLogWriter)
{while (pLogWriter->IsRunning()){if(pLogWriter->m_writeFileloopQueue.GetSize() <= 0){std::this_thread::sleep_for(std::chrono::milliseconds(10));continue;}CByteArray byteArray;if(!pLogWriter->m_writeFileloopQueue.DeQueue(byteArray)){continue;}if (!CLogSystem::Instance().IsSaveToFile()){continue;}//if (std::filesystem::exists(logfilepath))//{//	auto fileSize = GetFileSize(logfilepath);//	if (fileSize > static_cast<size_t>(5 * 1024) * 1024)//	{//		strftime(tdatetime, sizeof(tdatetime), "%Y%m%d%H%M%S", &now_tm);//		auto newlogfilepath = "test.log" + std::string(tdatetime)).u8string();//		std::filesystem::rename(logfilepath, newlogfilepath);//	}//}std::ofstream file(CLogSystem::Instance().GetFileName(), std::ios::app);if (!file.is_open()){pLogWriter->SetRunning(false);break;}file << byteArray.m_strMsg;}
}void CLogWriter::WriteRemoteThreadFunc(CLogWriter* pLogWriter)
{while (pLogWriter->IsRunning()){}
}
http://www.lryc.cn/news/492390.html

相关文章:

  • Linux:文件管理(一)——文件描述符fd
  • 【C++初阶】第3课—类和对象(类的默认成员函数)
  • uni-app初学笔记:文件路径与作用
  • 小程序-使用 iconfont 图标库报错:Failed to load font
  • 【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写
  • 速度革命:esbuild如何改变前端构建游戏 (1)
  • 大语言模型---什么是注意力机制?LlaMA 中注意力机制的数学定义
  • LSA详情与特殊区域
  • Python爬虫能处理动态加载的内容吗?
  • Spring Boot Web应用开发:数据访问
  • 【Linux】进程控制-----进程创建与进程终止
  • 【软考速通笔记】系统架构设计师③——信息安全技术基础知识
  • AI安全:从现实关切到未来展望
  • YOLO格式数据集介绍
  • Doris 数据集成 LakeSoul
  • Navicat 预览变更sql
  • 深入理解下oracle 11g block组成
  • Qt Graphics View 绘图架构
  • 大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
  • 零基础学安全--shell脚本学习(1)脚本创建执行及变量使用
  • C#对INI配置文件进行读写操作方法
  • 华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座
  • 请求响应(学习笔记)
  • JavaScript核心语法(5)
  • 2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现
  • MongoDB 和 Redis 是两种不同类型的数据库比较
  • CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读
  • Spring Boot 开发环境搭建详解
  • 网络安全中的数据科学如何重新定义安全实践?
  • 安装数据库客户端工具