chrono精讲

63 阅读2分钟
  • C++11版本中将chrono库加入标准库。所有的定义在命名空间std::chrono之中。库分为三大模块

    时间点时钟持续时间
    time_pointsteady_clock等duration

    核心在于时间点类

    time_point类模板:

    • 模板第一参数为非默认参数,时间类。以什么角度计算时间,下列两个表格为不同角度
      时间类定义场景
      steady_clock程序运行的时间测试时间
      system_clock程序运行的时间+系统调度的时间显示时间
    • 模板第二参数为默认参数,时间间隔,为duration<long int, ratio<1, 1000000000>>。以long int存储时间,并通过ratio中的比率进行兑换,即num*(1/100...0),单位为秒
  • steady_clock

    #include <chrono>
    #inclued <iostream>
    
    using namespace std;
    using namespace std::chrono;
    
    int main() {
        // time_point构造函数
        // 第一参数为非默认参数,时间类
        // 第二参数为默认参数,时间间隔,为duration<long int, ratio<1, 1000000000>>
        time_point<steady_clock> start, end;
        
        // 静态函数:now
        start = steady_clock::now();
        /* 测试代码 */
        end = steady_clock::now();
        
        // duration构造函数
        // 第一参数为非默认参数,存储类型
        // 第二参数为默认参数,时间换算比率,为ratio<1>
        // 以下二者选其一即可,单位不同
        // 方式一,单位为纳秒
        duration<long int, std::ratio<1, 1000000000>> duration = end - start;
        // 方式二,单位为秒
        duration<double> duration = end - start;
        
        cout << duration.count() << endl;
        
        return 0;
    }
    
  • system_clock

    #include <chrono>
    #inclued <iostream>
    
    using namespace std;
    using namespace std::chrono;
    
    int main() {
        // 获取当前表示时间,以下二者选其一即可
        // 方式一
        // 类型为duration<long int, ratio<1, 1000000000>>
        auto dur_curr = system_clock::now().time_since_epoch();
        time_t tt = durr_curr / 1000000000;
        // 方式二:
        duration<double> dur_curr = system_clock::now().time_since_epoch().count();
        time_t tt = dur_curr;
        
        // ctime将秒转换为真实世界的时间
        cout << ctime(&tt) << endl;
        
        return 0;
    }
    
  • 其他

    // duration常用时间
    #include <chrono>
    #inclued <iostream>
    
    using namespace std;
    using namespace std::chrono;
    
    int main(void) {
        // duration<long int, ratio<3600, 1>>
        auto dur1 = hours(2);
        // duration<long int, ratio<60, 1>>
        auto dur2 = minutes(30);
        // duration<long int, ratio<1, 1>
        auto dur3 = seconds(3);
    
        // 以秒形式输出时间
        std::cout << duration_cast<seconds>(dur1).count() << std::endl;
        std::cout << duration_cast<seconds>(dur2).count() << std::endl;
        
        return 0;
    }