精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容
近期使用httplib,研究了httplib的源代码,里面的duration使用duration_cast转换为秒和毫秒的例子比较精巧,带上注释分享给大家,最后也说下duration的理解。
template <typename T, typename U> inline void duration_to_sec_and_usec(const T &duration, U callback) { auto sec = std::chrono::duration_cast<std::chrono::seconds>(duration).count();//std::chrono::seconds是强制转换单元 auto usec = std::chrono::duration_cast<std::chrono::microseconds>(//std::chrono::microseconds单元 duration - std::chrono::seconds(sec))//相当于全部减去整数部分,留下小数部分按microseconds转 .count(); callback(static_cast<time_t>(sec), static_cast<time_t>(usec)); }
duration刚开始不好理解,template <class Rep, class Period> class duration;里的Period是周期的意思,用ratio来表示,而Rep是重复的类型,Rep应该是Repeat的意思,记住是类型。
ratio也是个类型,是结构体封装的类型,比如MSDN的例子:
// create a duration that tracks ticks as 1/10ths of a second duration<int, std::ratio<1, 10>> tenths{ 5 };
周期是0.1秒,分秒ds,{5}是5个分秒,5ds。ratio<1>是1秒,ratio<1,10>是0.1秒。