跟着小德学C++之日志记录

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界本源的探索。那么就由我来带领大家拨开迷雾,深入探究我们世界的根本。

92-102这10行代码仅是做输出基础信息使用的,我们就不做赘述,我们主要看88-90这几行。

作为一个成熟的程序,必然需要日志来作为记录异常和调试的工具。而AZ端主要的日志操作就是sLog模块。

从common/Logging/Log.h中我们可以知道,如同sConfigMgr一样,sLog是Log的实例。所谓初始化日志模块,主要就是配置日志级别和输出位置。

88行初始化输出位置(终端、日志文件等),89行基于配置重新设置日志级别和输出位置。

我们再深入探究后,会发现最终记录日志,使用到了boost::asio模块。

Boost.Asio是一个跨平台的C++库,用于网络和低级I/O编程。它提供了一种现代C++方法,为开发人员提供了一致的异步模型。Boost.Asio提供了基本的C++网络、并发和其他类型I/O的构建模块。

Boost.Asio的特点包括:

  • 异步模型:使用现代C++方法实现了一致的异步模型。
  • 跨平台:支持多个平台,包括Linux、macOS、Windows和FreeBSD。
  • 应用范围广泛:Boost.Asio被用于各种应用程序,从手机应用到世界上最快的股票交易市场。

要使用Boost.Asio,您可以按照以下步骤进行:

  1. 包含头文件

: 在您的C++代码中包含Boost.Asio的头文件,以便可以使用其中定义的类和函数。例如:

#include <boost/asio.hpp>
  1. 创建io_context

: 创建一个boost::asio::io_context对象,它代表了系统的I/O上下文。这是执行异步操作所必需的。

boost::asio::io_context ioContext;
  1. 创建Socket对象

: 根据您的需求,创建一个boost::asio::ip::tcp::socket或boost::asio::ip::udp::socket对象,用于处理TCP或UDP通信。

boost::asio::ip::tcp::socket tcpSocket(ioContext);
  1. 执行异步操作

: 使用async_read、async_write等函数执行异步读取或写入操作。这些操作将在后台进行,不会阻塞您的程序。

tcpSocket.async_read_some(boost::asio::buffer(data, length), handler);
  1. 处理事件循环

: 调用ioContext.run()来启动事件循环,这将使异步操作得以执行。

ioContext.run();
  1. 处理回调

: 为异步操作的完成定义回调函数,并在操作完成时进行处理。

void handler(const boost::system::error_code& error, std::size_t bytes_transferred) { if (!error) { // 操作成功完成 } else { // 发生错误 } 
}

这些是使用Boost.Asio进行基本网络编程的一般步骤。当然,Boost.Asio还提供了更多高级功能,如定时器、解析器等,以满足更复杂的网络编程需求。您可以参考Boost.Asio的官方文档和教程,以获取更详细的信息和示例代码。

由此可以说明,AZ端日志模块采用了异步IO的方式,目的是提高非日志模块的运行效率。

好了,今天就到这里吧,我要去呵护我的世界之树了,拜拜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Bootstrap5学习 day12】

Bootstrap5 导航 Bootstrap5提供了一种简单快捷的方法来创建基本导航&#xff0c;它提供了非常灵活和优雅的选项卡和Pills等组件。Bootstrap5的所有导航组件&#xff0c;包括选项卡和Pillss&#xff0c;都通过基本的.nav类共享相同的基本标记和样式。 创建基本导航 要创建简单…

Mybatis分页插件PageHelper的配置和使用

文章目录 每页10条记录&#xff0c;取第一页&#xff0c;返回的是前10条记录每页10条记录&#xff0c;取第二页&#xff0c;返回的是第11条记录&#xff0c;到第20条记录&#xff0c; MySQL对分页的支持 简单来说MySQL对分页的支持是通过limit子句。请看下面的例子。 limit关键…

使用pagehelper插件进行分页查询

一、导入mybatis和pagehelper坐标 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> </dependency> <dependency><groupId&…

PDF.js实现搜索多个不同的关键词高亮显示效果

static\PDF\web\viewer.js 392行左右 // 自定义搜索关键词---------------------------------------- this.searchKeywords = keyword => {if (typeof PDFViewerApplication !== undefined) {PDFViewerApplication.eventBus.dispatch(find, {query: keyword,caseSensitive:…

代码随想录算法训练DAY22|二叉树8

算法训练DAY22|二叉树8 235. 二叉搜索树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点…

PEFT: 在低资源硬件上对十亿规模模型进行参数高效微调

1 引言 最近&#xff0c;深度学习的研究中出现了许多大型预训练模型&#xff0c;例如 GPT-3、BERT 等&#xff0c;这些模型可以在多种自然语言处理任务中取得优异的性能表现。而其中&#xff0c;ChatGPT 模型因为在对话生成方面的表现而备受瞩目&#xff0c;成为了自然语言处理…

sublime text 3 分屏和关闭分屏

有时候需要编辑多个地方的代码&#xff0c;开多个编辑器又太麻烦&#xff0c;那么Sublime自带的分屏快捷键可以解决烦恼。 Altshift2 分为2列 Altshift3 分为3列 Altshift4 分为4列 Altshift5 分为2行2列 Altshift8 分为2行 Altshift9 分为3行 取消分屏&#xff1a;Alts…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建一个TcpConnection实例 以及 接收客户端数据

#CSDN 年度征文&#xff5c;回顾 2023&#xff0c;赢专属铭牌等定制奖品# 一、主线程反应堆模型的事件添加和处理详解 >>服务器和客户端建立连接和通信流程&#xff1a; 基于多反应堆模型的服务器结构图&#xff0c;这主要是一个TcpServer&#xff0c;关于HttpServer,…

分布式协调系统

分布式协调系统 分布式协调系统解决的进程间的通信和协作&#xff0c;根据是否在同一时间和是否相互引用分为四个模型。 示例系统Chubby 主功能&#xff1a;让客户端实现同步&#xff0c;方法是加锁服务 介绍一下系统&#xff1a; 系统由五台服务器构成&#xff0c;通过pax…

智慧地球(AI•Earth)社区成立一周年啦!独家福利与惊喜彩蛋等你来拿!

原文&#xff1a;智慧地球&#xff08;AI•Earth&#xff09;社区成立一周年啦&#xff01; 智慧地球社区 一周年庆典&#x1f38a; 独家福利&#x1f381;与惊喜彩蛋&#x1f389;等你来拿&#xff01; 智慧地球&#xff08;AI•Earth&#xff09;社区自2023年1月11日建立以…

app store里面的构建版本在线上传

开发苹果ios应用&#xff0c;无论是用原生开发、用hbuilderx开发还是用其他h5框架开发的app&#xff0c;都需要将打包好的ipa文件上传到app store。 在上架app store的过程中&#xff0c;我们会遇到下图的这样一个问题&#xff1a; 就是它要求我们上传一个构建版本&#xff0c…

如何保障开放网络边界安全?

针对开放式网络&#xff08;办事大厅、视频网络等&#xff09;&#xff0c;如何在内部网络构建起一道安全屏障&#xff0c;有效解决广大用户普遍存在的无法保证网络边界完整、边界安全、公共场所终端摄像头管理、办事大厅智能设备&#xff08;一体机等&#xff09;管理、开放场…

【C语言】Linux实现高并发处理的过程

一、实现高并发的几种策略 C语言本身并没有内建的多线程支持&#xff08;新版C语言支持&#xff0c;但用得不多&#xff09;&#xff0c;但是在多数操作系统中&#xff0c;可以使用库来实现多线程编程。例如&#xff0c;在POSIX兼容系统上&#xff0c;可以使用 pthreads 库来创…

django学习:页面渲染与请求和响应

1.请求过程 2.页面渲染 在app中新建一个目录&#xff08;Directory&#xff09;&#xff0c;文件名命名为templates。该文件名命名是固定的&#xff0c;不可命名出错&#xff0c;如若后续步骤出错&#xff0c;该目录文件名是一个检查的重点项目。在该目录下新建一个html文件&a…

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…

MySQL之视图内连接、外连接、子查询

一、视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 视图&#xff08;view&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。但是&#xff0c;数据库中只存放了视图的定义&#xff0c;而并没有存放…

Jmeter二次开发实操问题汇总(JDK问题,jar包问题)

前提 之前写过一篇文章&#xff1a;https://qa-lsq.blog.csdn.net/article/details/119782694 只是简单尝试了一下生成一个随机手机号码。 但是如果在工作中一个实际场景要用的二次开发&#xff0c;可能会遇到一些问题。 比如这样一个场景&#xff1a; Mobile或者前端调用部分…

如何评判一款智能酒精壁炉品质是否优秀

在当今家居设计中&#xff0c;智能酒精壁炉作为一种独特的取暖和装饰方式&#xff0c;受到越来越多人的青睐。然而&#xff0c;如何挑选和选择优质的智能酒精壁炉成为了一个重要的话题&#xff0c;下面将深入探讨哪样的智能酒精壁炉才算得上是品质卓越。 优质的智能酒精壁炉通常…

Guarded Suspension模式--适合等待事件处理

Guarded是被守护、被保卫、被保护的意思&#xff0c; Suspension则是暂停的意思。 如果执行现在的处理会造成问题&#xff0c; 就让执行处理的线程进行等待--- 这就是Guarded Suspension模式。 模式通过让线程等待来保证实例的安全性。 一个线程ClientThread会将请求 Request的…

AWS EKS1.26+kubesphere3.4.1

1、前提准备 1台EC2服务器Amazon Linux2&#xff0c;设置admin的角色 安装 aws cli V2 ​ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installexport PATH/usr/local/bin:$PATHsou…