当前位置: 首页 > 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()){}
}

相关文章:

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

用到前文中的循环队列模板 /* ** File name: LogWriter.h ** Author: ** Date: 2024-11-4 ** Brief: 日志写入类 ** Note: 日志写入类&#xff0c;负责将日志写入文件和连接客户端。 ** Copyright (C) 1392019713qq.com All rights reserve…...

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…...

【C++初阶】第3课—类和对象(类的默认成员函数)

文章目录 1. 类的默认成员函数2. 构造函数3. 拷贝构造函数3.1 传值传参3.2 传值返回3.3 深拷贝和浅拷贝3.4 总结 4. 析构函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 日期类的实现 6. 取地址运算符重载6.1 const 成员函数6.2 取地址运算符重载 1. 类的默认成员函…...

uni-app初学笔记:文件路径与作用

components:可复用的组件pages:页面&#xff08;可见/不可见&#xff09;static:静态资源&#xff0c;存放图片视频等 &#xff08;相当于vue项目的 assets&#xff09;mainjs:Vue初始化入口文件App.vue:应用配置&#xff0c;用来配置App全局样式以及监听pages.json :配置页面路…...

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误&#xff0c;在清除缓存后首次刷新会显示此错误&#xff0c;重新渲染错误消失 解决方法&#xff1a; 在 iconfont 图标库选择项目设置 选中 Base64 保存&#xff0c;重新点击链接 -> 复制代码到项目中 操作步骤&#xff1a;...

【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写

&#x1f30e; 应用层自定义协议与序列化 文章目录&#xff1a; Tcp协议Socket编程 应用层简介 序列化和反序列化       重新理解read/write/recv/send及tcp的全双工       Socket封装       服务器端改写 &#x1f680;应用层简介 我们程序员写的一个个解决…...

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild&#xff1f; esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具&#xff0c;以其卓越的性能著称。相比传统的构建工具&#xff08;如 Webpack&#xff09;&#xff0c;esbuild 在打包速度上有着显著的优势&#xff0c;能够将打包速度提升 10 到 100 倍…...

大语言模型---什么是注意力机制?LlaMA 中注意力机制的数学定义

摘要 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在深度学习和人工智能中广泛使用的技术&#xff0c;旨在使模型在处理信息时能够重点关注重要的部分&#xff0c;从而提升任务的效率和精度。它最初应用于自然语言处理&#xff08;NLP&#xff09;&#xff0…...

LSA详情与特殊区域

LSA是构成LSDB的重要原材料&#xff0c;在OSPF中发挥很大作用。 报文 通用头部 LS age&#xff1a;LSA寿命&#xff0c;0-3600s Options&#xff1a;可选项 LS type&#xff1a;LSA类型&#xff0c;三要素之一 Link State ID&#xff1a;LSAID 三要素之一 Advertising Ro…...

Python爬虫能处理动态加载的内容吗?

Python爬虫确实可以处理动态加载的内容。动态加载的内容通常是通过JavaScript在客户端执行&#xff0c;这意味着当网页首次加载时&#xff0c;服务器返回的HTML可能并不包含最终用户看到的内容。相反&#xff0c;JavaScript代码会在页面加载后从服务器请求额外的数据&#xff0…...

Spring Boot Web应用开发:数据访问

数据访问是Web应用的关键部分&#xff0c;Spring Boot简化了这一流程&#xff0c;特别是通过集成Java Persistence API (JPA) 来实现数据持久化。以下是如何在Spring Boot中配置数据源、使用JPA进行数据持久化以及创建访问数据的REST接口。 配置数据源 在Spring Boot中&#…...

【Linux】进程控制-----进程创建与进程终止

目录 前言&#xff1a; 一、进程创建&#xff1a; 1、fork函数 2、创建多个进程&#xff1a; 3、写时拷贝&#xff1a; 二、进程终止&#xff1a; 进程退出码&#xff1a; 退出方式&#xff1a; ​编辑 进程异常退出&#xff1a; 缓冲区&#xff1a; 前言&#xff1…...

【软考速通笔记】系统架构设计师③——信息安全技术基础知识

文章目录 一、前言二、信息安全基础知识2.1 信息安全的基本要求2.2 信息安全的范围2.3 网络安全表现2.4 安全措施包括 三、信息安全系统的组成框架3.1 技术体系&#xff1a;3.2 组织机构体系&#xff1a;3.3 管理体系 四、信息加解密技术4.1 对称密钥加密算法4.2 非对称密钥加密…...

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…...

YOLO格式数据集介绍

yolo数据集 yolo数据集标注格式主要是 yolov5 项目需要用到。 标签使用txt文本进行保存。yolo的目录如下所示&#xff1a; dataset ├─images │ ├─train │ │ ├─ flip_mirror_himg0026393.jpg │ │ ├─ flip_mirror_himg0026394.jpg │ │ ├─ flip_…...

Doris 数据集成 LakeSoul

Doris 数据集成 LakeSoul 作为一种全新的开放式的数据管理架构,湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越多的应用。 在过去多个版本…...

Navicat 预览变更sql

需求 用了Flyway&#xff08;数据库迁移工具&#xff09;后&#xff0c;需要记录变更sql&#xff0c;所以要知道变更sql。 查看方式 Navicat提供了预览变更sql功能&#xff0c;右击表---->设计表&#xff0c;比如修改字段后&#xff0c;点击SQL预览标签页&#xff0c; 顺…...

深入理解下oracle 11g block组成

深层次说&#xff0c;oracle数据库的最少组成单位应该是块&#xff0c;一般默认情况下&#xff0c;oracle数据库的块大小是8kb&#xff0c;其中存储着我们平常所需的数据。我们在使用过程中&#xff0c;难免会疑问道&#xff1a;“oracle数据块中到底是怎样组成的&#xff0c;平…...

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…...

大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

零基础学安全--shell脚本学习(1)脚本创建执行及变量使用

目录 学习连接 什么是shell shell的分类 查看当前系统支持shell 学习前提 开始学习 第一种执行脚本方法 ​编辑 第二种执行脚本方法 第三种执行脚本方法 变量声明和定义 ​编辑 查看变量 删除变量 学习连接 声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣…...

C#对INI配置文件进行读写操作方法

#region 读写ini配置文件/// <summary>/// 对INI文件进行读写/// </summary>class INIHelper{/// <summary>/// 从INI文件中读取数据/// </summary>/// <param name"filePath">INI文件的全路径</param>/// <param name"…...

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核&#xff0c;鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征&#xff0c;性能超越Linux内核10.7%。 鸿蒙内核更弹性&#xff1a;元OS架构&#xff0c;性能安全双收益 万…...

请求响应(学习笔记)

请求响应 文章目录 请求响应请求Postman简单参数实体参数数组集合参数数组参数集合参数 日期参数JSON参数路径参数 响应响应数据统一响应结果 分层解耦三层架构分层解耦IOC & DI 入门IOC详解DI详解 请求响应&#xff1a; 请求(HttpServeltRequest)&#xff1a;获取请求数据…...

JavaScript核心语法(5)

这篇文章讲一下ES6中的核心语法&#xff1a;扩展运算符和模块化。 目录 1.扩展运算符 数组中的扩展运算符 基本用法 合并数组 对象中的扩展运算符 基本用法 合并对象 与解构赋值结合使用 数组解构中的剩余元素 对象解构中的剩余属性 2.模块化 基本概念 1.扩展运算符…...

2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现

目录 第一题握手&#xff0c;这个直接从49累加到7即可&#xff0c;没啥难度&#xff0c;后面7个不握手就好了&#xff0c;没啥讲的&#xff0c;(然后第二个题填空好难&#xff0c;嘻嘻不会&#xff09; 第三题.好数​编辑 第四题0R格式 宝石组合 数字接龙 最后一题:拔河 第…...

MongoDB 和 Redis 是两种不同类型的数据库比较

MongoDB 和 Redis 是两种不同类型的数据库&#xff0c;设计目标和应用场景各有侧重&#xff0c;因此性能对比需要结合具体需求场景进行评估。 1. MongoDB 性能特点 类型: 文档型数据库&#xff08;NoSQL&#xff09;。适合场景: 复杂查询&#xff1a;支持丰富的查询语法和索引…...

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同&#xff0c;(Radford et al., 2021) 引入了一种新范式&#xff0c;该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中&#xff0c;通…...

Spring Boot 开发环境搭建详解

下面安装spring boot的详细步骤&#xff0c;涵盖了从安装 JDK 和 Maven 到创建和运行一个 Spring Boot 项目的全过程。 文章目录 1. 安装 JDK步骤 1.1&#xff1a;下载 JDK步骤 1.2&#xff1a;安装 JDK步骤 1.3&#xff1a;配置环境变量 2. 安装 Maven步骤 2.1&#xff1a;下载…...

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据&#xff0c;这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难&#xff0c;常常导致疏忽。以前&#xff0c;公司依靠 FUD 方法&#xff08;恐惧、不确定性和怀疑&#xff09;来识别潜在攻击。然而&#xff0c;将数据科学集成到网络安全中…...

做dj音乐网站/周口搜索引擎优化

Pytorch Note41 N-Gram 模型 文章目录 Pytorch Note41 N-Gram 模型单词预测的 Pytorch 实现定义模型测试结果全部笔记的汇总贴: Pytorch Note 快乐星球 首先我们介绍一下 N-Gram 模型的原理和其要解决的问题。对于一句话,单词的排列顺序是非常重要的,所以我们能否由前面的几…...

网站营销队伍/培训机构在哪个平台找

前言 现在Java程序员面试都是因为没有丰富的工作经验和自己过硬的技术&#xff0c;所有都不知道一般互联网应该会问什么技术问题&#xff0c;加上自己可能去面试的时候没有准备的太充分&#xff0c;一面试刚跟面试官扯几个面试题就不知道自己在哪里了&#xff0c;被怼的体无完…...

怎么在wordpress中套用同行网页/漯河网络推广哪家好

什么是垃圾回收机制 任何语言在运行过程中都会创建对象&#xff0c;也就意味着需要在内存中为这些对象在内存中分配空间&#xff0c;在这些对象失去使用的意义的时候&#xff0c;需要释放掉这些内容&#xff0c;保证内存能够提供给新的对象使用。对于对象内存的释放就是垃圾回…...

奉贤网站建设公司/公司品牌宣传

一、百度上输入百度地图API 点击进入 二、下拉页面到底部 点击地图快速生成工具&#xff0c;进去 四、当前城市下面的框里输入你想定位的地点&#xff0c;再点击查找 五、下拉网页&#xff0c;网页中间看到生成代码按钮点击&#xff0c;就能看到生成的代码块 &#xff08;1&…...

南城网站建设公司案例/镇江网页设计

table在第一次往HashMap中put元素的时候初始化&#xff0c;如果HashMap初始化的时候没有指定容量&#xff0c;那么初始化table的时候会使用默认的DEFAULT_INITIAL_CAPACITY参数&#xff0c;也就是16&#xff0c;作为table初始化时的长度。 如果HashMap初始化的时候指定了容量&…...

自己做h5网站/全国疫情高峰感染高峰

与Non-mutating Algorithms相比&#xff0c;变易算法能修改容器元素数据&#xff0c;可进行序列数据的复制、交换、替换、填充、移除、旋转、随机抖动、分割。还是参考叶至军的那本书以及网站Cplusplus.com copy 元素复制。该函数用于容器间元素拷贝&#xff0c;将迭代器区间[…...