muduo网络库base篇二:Time! Time!

更新

  真不敢相信,读muduo已经近两年了,期间主要搞搞java,倒是少有精力读C/C++开源代码了。犹记得当年是整天整天的读muduo和redis,如今忘得差不多了。具体实现忘记也便罢了,可实现策略是不该这么快抛之脑后的。也因此,有了更新的想法,重读一遍,对于细节要刨根问底,多问一个为什么。对于策略要高屋建瓴,能准确描述出来。

  说来容易,做到不易。近日教一个没有编程经验的人python,就着实困难。我常感慨,现在的程序员更关注于使用,而不深究缘由。多年经验告诉我,当你进一步理解缘由时,使用起来会更好,更高效,也更准确。浩瀚书海,层层关联,深究也并非易事,此中道理非三言两语可道,姑且不论。苟日新,日日新,又日新,总是要好过原地踏步的。如果有什么值得践行的,我想下面这句话送给自己,和有缘看到博客的同志们:

博学之,审问之,慎思之,明辨之,笃行之。

  我的第一篇博客写的虽然浅显了些,但尚算生动,也许我当初嫌理论枯燥,有向新人解释概念的拳拳之心。后来的博客,偏向自己当时理解程度上的叠加,自己读之尚觉费劲。 展开思维,看理解是怎样发生的 ,虽知难以把所有知识点变得生动,但不忘拳拳之心总是好过不为。

基础类 Types.h copyable.h

可复制类继承copyable,否则继承boost::noncopyable。
对C++类型转换进行扩展,implicit_cast 隐式类型转换,down_cast指针转换(父类对象->子类对象)。


时间日期类

####Date类

在muduo::detail下实现儒略日算法及转换年月日结构函数
Date类使用儒略日
可以通过年月日或struct tm创建Date对象

####Timestamp类

Timestamp是毫秒级的时间戳
未提供从linux时间转换时间戳的构造函数
提供static函数从time_t转换时间戳
Timestamp.now()内部调用gettimeofday转换时间戳

int gettimeofday(struct timeval *tv,struct timezone *tz);

####TimeZone类

Linux时间转换函数:

struct tm* gmtime(const time_t* timep);
struct tm* localtime(const time_t* timep);
time_t timelocal(struct tm *tm);
time_t timegm(struct tm *tm);
time_t mktime(struct tm* timeptr);

TimeZone数据存储在shared_ptr:

struct TimeZone::Data
{
  vector transitions;
  vector localtimes;
  vector names;
  string abbreviation;
};

boost::shared_ptr data_;

TimeZone类同样实现了四种时间转换的API
muduo::detail中实现读取tzfile时区文件,以及查找localtime的函数
time_t与localtime tm转换利用了时区文件和timegm/gmtime函数
time_t与UTC tm转换则利用了Date类

注:不明白为何不直接做linux函数的封装 难道为了减少系统调用?


你可能感兴趣的:(muduo网络库)