Loading... chrono 是一个 time library , 源于 boost ,现在已经是 C++ 标准,计时精度可以达到微秒级。 ## Example ```c++ #include <iostream> #include <chrono> int main() { auto begin = std::chrono::system_clock::now(); // do something auto end = std::chrono::system_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - begin); const double res = double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den; std::cout << "Took " << res << "seconds" << std::endl; return 0; } ``` ## Explain ### durations std::chrono::duration 表示一段时间。可以是 1 分钟,半个时辰, 6 秒等等,只要可以换算成秒即可。 ```c++ template <class Rep, class Period = ratio<1> > class duration; ``` - Rep 是一种数据类型,用来表示 Period 的数量。如 int,double 等。 - Period 是 ratio 类型的数,用来表示 一段时间换算成秒 是多少。 ratio 模板的原型: ```c++ template <intmax_t N, intmax_t D = 1> class ratio; ``` N代表分子,D代表分母,所以ratio表示一个分数值。 > 常用的 duration 已经定义好了,在 std::chrono::duration 里面: > > | duration | explain | > | -------------------- | ------------ | > | ratio<3600, 1> | hours | > | ratio<60, 1> | minutes | > | ratio<1, 1> | seconds | > | ratio<1, 1000> | milliseconds | > | ratio<1, 1000000> | microseconds | > | ratio<1, 1000000000> | nanoseconds | 由于各种duration表示不同,chrono库提供了duration_cast类型转换函数: ```c++ template <class ToDuration, class Rep, class Period> constexpr ToDuration duration_cast (const duration<Rep,Period>& dtn); ``` 同时 duration 还有一个成员函数 count() ,其返回值是 Rep 类型的 Period 数量。简单来说就是返回时间。 ### Time points **std::chrono::time_point** 表示任意一个具体的时间点,只要这个时间点可以用计算机时钟表示。而 time_point 的精度则取决于我们使用的单位,可以是某一天,某一分钟,某一秒等。一个 time_point 必须有一个 clock 计时。函数原型如下: ```c++ template <class Clock, class Duration = typename Clock::duration> class time_point; ``` **time_point** 有一个函数 **time_from_eproch()** 用来获得 197 0年 1 月 1 日到 time_point 时间经过的 duration 。duration 的单位和 time_point 相同。 由于各种 time_point 表示方式不同,chrono 也提供了相应的转换函数 time_point_cast : ```c++ template <class ToDuration, class Clock, class Duration> time_point<Clock,ToDuration> time_point_cast (const time_point<Clock,Duration>& tp); ``` ### clocks std::chrono::system_clock 它表示当前的系统时钟,系统中运行的所有进程使用 now() 得到的时间是一致的。 每一个clock类中都有确定的time_point, duration, Rep, Period类型。 操作有: - now() 当前时间 time_point - to_time_t() time_point 转换成 time_t 秒 - from_time_t() 从 time_t 转换成 time_point ## Referrer https://www.cnblogs.com/jwk000/p/3560086.html https://blog.csdn.net/u013390476/article/details/50209603 最后修改:2020 年 04 月 10 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏