mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: 本文仅实现了最基本的mutexlock和mutexlockguard,放弃了muduo源码中的一大堆宏定义,为求精简可读性高. 成员变量mutexlock: private: pthread_mutex_t m_mutex; pid_t m_holder; m_mutex为要操作的mutex.主要有…
logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间戳,logstream数据流,日志级别,源文件行号,源文件名字. class Impl { public: typedef logger::loglevel LogLevel; //构造函数,最重要的地方,负责把日志头信息写入到m_stream中 //m_stream<<日志级别,old_errn…
FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件有一个StringPiece.h 个人感觉这个stringpiece没有必要实现啊,直接用std::string就好了内部实现的操作,基本上std::string都能完成.后面有关stringpiece我都直接放弃了 const char* data() const { return ptr_; }…
CurrentThread 作用: CurrentThread并不是一个类,而是一个命名空间,在mymuduo内部,目的是提供对于当前线程的管理操作. 内部变量: __thread int t_cachedTid; //当前线程ID __thread char t_tidString[];//当前线程ID ,char*类型 __thread int t_tidStringLength;//char*大小 __thread const char* t_threadName;//当前线程名字 __t…
date class date:copyable { }: 作用: 此类作用主要是实现年月日和julianDay的互相转换内部最重要的一个数据成员m_julianDayNumber在mymuduo::detail中提供了相互转换的两个函数getJulianDayNumber和getYearMonthDay具体如何转换的内容没有深究.注意构造函数可以用julianday,年月日,struct tm三种类型去初始化,实际上都是年月日和julianDay之间的相互转换.toIosString 返回 格…
countdownlatch class countdownlatch:noncopyable { }; 作用: countdownlatch和mutex,condition一样,用于线程之间的同步,主要用于这样一种情况: 有一组线程,计算线程,IO线程1,IO线程2, 我们规定计算线程必须在所有的IO线程都结束后才能执行. 如果单纯使用mutex,计算线程可能比其他IO线程先抢到mutex,这不符合计算线程最后执行的要求. 但是可以使用条件变量来完成,当然条件变量不能单独使用,需要配套一个mu…
condition class condition:noncopyable { }; 作用: 实现了最简单condtion操作,包括init,destroy,wait,notify,notifyAll,waitforseconds操作,内部数据也很简单,mutexlock& m_mutex和pthread_cond_t m_cond使用方法和std::cond一样 成员变量: private: mutexlock& m_mutex; pthread_cond_t m_cond; 成员函数:…
exception class exception:public std::exception { }; 作用: 实现了一个异常类,继承于std::exception,主要用于实现打印线程调用栈信息. 成员变量: private: string m_message; string m_stack; 主要含有异常消息以及线程栈信息两个数据成员, 调用栈信息通过currentthread::stackTrace(false)获取. 成员函数: public: exception(string wha…
timezone class timezone:public copyable { }: 作用: 感觉有点看不懂,detail内部实现文件类不明白跟时区有什么关系.timezone类主要是完成各个时区之间的转换,感觉自己用不到,一个时区就够了.内部成员变量就一个,是个Data结构体的共享智能指针提供了3个构造函数,TimeZone(const char* zonefile)构造函数,构造函数是explicit的,内置指针不能隐式的转换,只能使用初始化的形式TimeZone(int eastOfU…
AtomicIntegerT template<typename T> class atomicTntergerT:public noncopyable { }; 作用: 与std::aotmic<int> 类似,主要实现对 int32_t 和 int64_t 类型的原子操作. 在内部并不是使用互斥锁实现原子性,而是利用__sync_val_compare_and_swap和__sync_fetch_and_add在内部实现原子操作. 成员变量: private: volatile…