muduo学习笔记
A_root_A
这个作者很懒,什么都没留下…
展开
-
muduo网络库学习笔记(十一):base库之 CurrentThread & Thread
CurrentThread主要就是为了获得当前线程的id和获取调用堆栈,Thread封装了创建线程及相关的apiCurrentThread.h中声明的一些函数在Thread.cpp中定义,两者关系紧密,所以可以放在一起看CurrentThread.h 源码注释#ifndef MUDUO_BASE_CURRENTTHREAD_H#define MUDUO_BASE_CURRENTTHREAD_H#include "Types.h"namespace muduo{//线程局部变量.原创 2020-08-11 12:59:55 · 348 阅读 · 1 评论 -
muduo网络库学习笔记(十):base库之 Logging
工作流程首先使用宏定义写日志#define LOG_TRACE if (muduo::Logger::logLevel() <= muduo::Logger::TRACE) \ muduo::Logger(__FILE__, __LINE__, muduo::Logger::TRACE, __func__).stream()#define LOG_DEBUG if (muduo::Logger::logLevel() <= muduo::Logger::DEBUG) \ mu..原创 2020-08-11 11:45:38 · 337 阅读 · 0 评论 -
muduo网络库学习笔记(九):base库之 CountDownLatch
类 CountDownLatch倒计时计数器CountDownLatch.h 源码注释/*倒计时计数器1. 首先,创建一个计数器,设置 count 的初始值,程序中的数值设置为3;2. 在执行了线程 D 之后,调用 countDownLatch.wait()方法,将会进入阻塞状态,直到 countDownLatch 的 count 参数值为 0;3. 在其他线程里,调用 countDownLatch.countDown() 方法,调用该方法会将计数值 减 1;4.原创 2020-08-11 08:49:46 · 175 阅读 · 0 评论 -
muduo网络库学习笔记(八):base库之 Condition
类 Condition是muduo库中对系统线程条件变量类函数进行的封装;往往跟mutexlock配合使用,但也不控制其对象的生存期。使用规范线程1锁住mutexwhile(条件)wait解锁mutex线程2锁住mutex更改条件signal或broadcast解锁mutex整个condition类主要为方便用户使用,封装了condition的api,notify() 封装了 pthread_cond_signalnotifyAll() 封装了pt原创 2020-08-10 20:52:23 · 128 阅读 · 0 评论 -
muduo网络库学习笔记(七):base库之 Mutex
互斥器Mutex.h中只用到了CurrentThread中的获取当前线程id的方法,就下面一句holder_ = CurrentThread::tid();其实就是调用了系统调用syscall来获取线程id。static_cast<pid_t>(::syscall(SYS_gettid))所以可以先不用看CurrentThread的源代码,只要看当前Mutex.h的源代码即可Mutex的使用方法可以看注释里,或者测试程序Mutex.h 源码注释#ifnd.原创 2020-08-10 18:07:12 · 207 阅读 · 0 评论 -
muduo网络库学习笔记(六):base库之 StringPiece
C++里面有string和char*,如果你用const string &s 做函数形参,可以同时兼容两种字符串。但当你传入一个很长的char * 时,char转string,创建一个临时string对象,同时开辟一个内存空间,拷贝字符串, 开销比较大。如果你的目的仅仅是读取字符串的值,用这个StringPiece的话,仅仅是4+一个指针的内存开销,而且也保证了兼容性。所以这个类的目的是传入字符串的字面值,它内部的ptr_ 这块内存不归他所有。所以不能做任何改动。归根结底,是处于性能的考虑,用以实现原创 2020-08-10 18:02:07 · 232 阅读 · 0 评论 -
muduo网络库学习笔记(五):base库之 TimeZone
这部分源代码还有部分未搞懂的,日后填坑作用:时区与夏令时,方便时区之间的转换,以及时令之间的转换前置知识:先阅读过Data,noncopyable,copyable 系列源代码#include <time.h>struct tm { int tm_sec; /* 秒 – 取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_hour; /* 时 - 取值区间为[0,...原创 2020-08-08 19:55:02 · 393 阅读 · 0 评论 -
muduo网络库学习笔记(四):base库之 Date
作用:julian日历库(即公历)成员结构体 YearMonthDay struct YearMonthDay { int year; // [1900..2500] int month; // [1..12] int day; // [1..31] }; 该结构体表示通用的日期格式成员函数 Date() 构造函数 Date(int year, int month, int day); 用年月日初始化 julianDayNumber_ Date(int .原创 2020-08-07 19:25:37 · 193 阅读 · 0 评论 -
muduo网络库学习笔记(三):base库之 Timestamp
作用:UTC 时间戳前置知识:先阅读过Types,copyable 系列源代码常量 kMicroSecondPerSecond 每秒所对应的微秒数成员函数 swap() 交换函数 toString() 将时间转换为string类型string Timestamp::toString()const{ char buf[32]={0}; int64_t seconds=microSecondsSinceEpoch_/kMicroSecondPerS...原创 2020-08-07 15:24:17 · 229 阅读 · 0 评论 -
muduo网络库学习笔记(二):base库之 Types.h
基本类型的声明,包括muduo::string类型转换 implicit_cast 和 down_cast1. 基本类型的声明using std::string;//简化了用 memset 初始化的使用inline void memZero(void* p,size_t n){ memset(p,0,n);}隐式类型转换:隐式类型转化是编译器默默地、隐式地、偷偷地进行的类型转换,这种转换不需要程序员干预,会自动发生,比如赋值转换 float f = 100;强制类型转换:..原创 2020-08-06 14:42:50 · 258 阅读 · 0 评论 -
muduo网络库学习笔记(一):base库之noncopyable.h & copyable.h
muduo 中的大多数 class 都是不可拷贝的,有小部分是可拷贝的。不可拷贝的 class 将继承 类 noncopyable可拷贝的 class 将继承 类 copyablenoncopyable.hnoncopyable (const noncopyable&) = delete;void operator=(const noncopyable&) = delete;在拷贝构造函数和赋值函数定义后面加上 =delete 表示基类以及其派生类无法进行拷贝构造和赋原创 2020-08-06 14:10:20 · 324 阅读 · 0 评论 -
muduo网络库学习笔记(零):前言
在购买《Linux多线程服务端编程 使用muduo C++ 网络库》该书籍后,书上对于muduo网络库的解释只对于net库,直接使用了base库,而在阅读base库中的文件时,有些文件的功能,所写的代码对于我这样的新手来说不好理解,而网上也没有对于base库中的文件非常详细的说明,所以我将一边阅读源码,一边通过搜索搞懂未读懂的代码,添加注释。读完一个文件后,写一篇博客讲述这个文件的详细信息,以此来提高自己对muduo网络库的理解。源代码的注释版本和每个文件对应的说明markdown文件保存在我GitHu原创 2020-08-06 13:56:33 · 206 阅读 · 0 评论