码迷,mamicode.com
首页 > 编程语言 > 详细

C++11--时钟和计时器<chrono>

时间:2018-12-30 17:36:16      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:其他   默认   计时   表示   \n   介绍   cpp   ISE   运行   

/* 介绍<chrono> 
    
    -- 一个精确中立的时间和日期库
    
 * 时钟:
 *
 * std::chrono::system_clock:  依据系统的当前时间 (不稳定)
 * std::chrono::steady_clock:  以统一的速率运行(不能被调整)
 * std::chrono::high_resolution_clock: 提供最小可能的滴答周期
 *                   (可能是steady_clock或者system_clock的typedef)
 *
 * std:ratio<>表示时钟周期,即时间的计量单位
 */

std::ratio<1,10>  r; // 
cout << r.num << "/" << r.den << endl;

cout << chrono::system_clock::period::num << "/" << chrono::system_clock::period::den << endl;
cout << chrono::steady_clock::period::num << "/" << chrono::steady_clock::period::den << endl;
cout << chrono::high_resolution_clock::period::num << "/" << chrono::high_resolution_clock::period::den << endl;

/*
 *
 * std:chrono::duration<>:  表示持续的时间
 *    duration<int, ratio<1,1>> --  秒数存储在一个int中 (默认)
 *    duration<double, ration<60,1>> -- 分钟数储存在一个double中
 *    库中定义了如下方便的duration:
 *    nanoseconds, microseconds, milliseconds, seconds, minutes, hours
 * system_clock::duration  -- duration<T, system_clock::period>
 *                                 T是一个有符号的算术类型, 可以是int或long或其他
 */
chrono::microseconds mi(2745);
chrono::nanoseconds na = mi;
chrono::milliseconds mill = chrono::duration_cast<chrono::milliseconds>(mi);  // 当可能发生信息丢失的时候,要显式地转换
                                                          // 直接截断,而不是四舍五入
    mi = mill + mi;  // 2000 + 2745 = 4745
    mill = chrono::duration_cast<chrono::milliseconds>(mill + mi);  // 6
    cout << na.count() << std::endl;
    cout << mill.count() << std::endl;
    cout << mi.count() << std::endl;

   cout << "min: " << chrono::system_clock::duration::min().count() << "\n";
   cout << "max: " << chrono::system_clock::duration::max().count() << "\n";


 /* std::chrono::time_point<>: 表示一个时间点
 *       -- 自从一个指定的时间点开始的过去的时间长度: 
 *          00:00 January 1, 1970 (Corordinated Universal Time - UTC)  -- 时钟的纪元
 * time_point<system_clock, milliseconds>:  依据system_clock, 自从纪元开始经过的毫秒数
 *
 * typdefs
  system_clock::time_point  -- time_point<system_clock, system_clock::duration>
  steady_clock::time_point  -- time_point<steady_clock, steady_clock::duration>
 */
    // 使用系统时间
    chrono::system_clock::time_point tp = chrono::system_clock::now();
    cout << tp.time_since_epoch().count() << endl;  
    tp = tp + seconds(2);  // 因为tp精度高,不需要转换
    cout << tp.time_since_epoch().count() << endl;

    // 计算时间间隔最好用steady_clock
    chrono::steady_clock::time_point start = chrono::steady_clock::now();
    cout << "I am bored" << endl;
    chrono::steady_clock::time_point end = chrono::steady_clock::now();
    chrono::steady_clock::duration d = end - start;
    if (d == chrono::steady_clock::duration::zero())    //0时间长度的表示
        cout << "no time elapsed" << endl;
    cout << duration_cast<microseconds>(d).count() << endl;
   // 使用system_clock可能得到不正确的值

C++11--时钟和计时器<chrono>

标签:其他   默认   计时   表示   \n   介绍   cpp   ISE   运行   

原文地址:https://www.cnblogs.com/logchen/p/10199761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!