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


    /* 介绍<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() << "
    ";
       cout << "max: " << chrono::system_clock::duration::max().count() << "
    ";
    
    
     /* 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可能得到不正确的值
    
    
  • 相关阅读:
    问题解决:System.TypeLoadException: 未能从程序集“XXX”中加载类型“XXX
    域名格式验证
    .NET 中String 和StringBuilder 以及他们的区别
    mysql 重设管理员密码 或忘记管理员密码 (必杀)
    CMD 命令
    C# 给多线程传参的三种方式
    django 表单数据的验证实现原理
    django上传文件
    django signal
    Django如何处理语言偏好(根据此可以设置中文)
  • 原文地址:https://www.cnblogs.com/logchen/p/10199761.html
Copyright © 2020-2023  润新知