猫猫哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
/* 介绍<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可能得到不正确的值

posted on 2018-12-30 16:16  猫猫哥  阅读(6300)  评论(0编辑  收藏  举报