在完成 *nix环境下的串口通信 时, 遇到了一些并行上的问题,于是尝试使用高精度计时器,来计算等待各个锁的时间,以进行进一步的分析,于是用到了 std::chrono 库,这个库是 C++11 标准后,提供与时间相关对象的库,用法如下.(终于不用考虑平台相关的API了!)

在这个库中,比较核心的是 std::chrono::time_pointstd::chrono::duration 两个类型,分别用于描述一个确定的时间点(一段时间的间隔(std::chrono::duration)与一个恒定的时钟基准(如 std::chrono::system_clock)结合,便成为了时间点),与一段时间(可以是两个时间点之间的差).

围绕着这两个核心的类型, std::chrono 还提供了一些时间转换常用的辅助工具,如 std::chrono::time_point 之间的减法(大概因为只有减法是有意义的吧) 以及对 std::chrono::duration 的加减乘除求余的运算,以及不同单位的互相转换(std::chrono::duration_cast),互相对比(运算符重载).

 

而在 C++14 以后,还加入了描述时间的文法,就像下面那样:

PS:另一个接触的原因,就是 std::condition_variable 之类的许多地方也都使用 std::chrono::duration 来描述时间.

PS2:依然是f7(eiki)哇!

PS3: std::chrono 里的那些类型都可以指定实际存储时间的类型(long long uint之类的感觉),不过有对于s必须用至少35位长度的数据类型 之类的限制!

PS4: std::chrono::steady_clock 也是一个特殊的clock,不过不保证每次程序启动时间的起点是一致的,不过更适合时间间隔的获取.

PS5:之前的字节流缓冲区…因为线程同步问题…出现了点挫折,得再试试(T T)