C++_3——库(chrono)


  这一系列文章的目的是在学习了C++基础后,继续补充一些C++基础和进阶的知识点,包括C++11的相关内容。
以C++11标准为基础。

C++网站:http://www.cplusplus.com/reference/

C++11引入的时间库 chrono
  1. chrono通过三种方式描述时间:DurationsTime pointsClocks
  2. Durations描述一段时间(如,10ms),由计数(count representation,即,10)和周期精度(period precision,即,ms)表示
  3. Time points表示一个时间点,Time points由Clock类型和相对Clock时间原点(epoch)的Durations表示
  4. Clocks描述计时的基准,chrono提供了三种Clock
    system_clock 系统时钟,反应当前系统时间
    steady_clock 单调时钟,就像秒表,记录程序运行时间,主要用来计算时间间隔Durations
    high_resolution_clock 系统能够提供的最高精度下的steady_clock
  5. 基本使用
#include <chrono>
using namespace std::chrono;

// 1 时间点
	// 获取某时钟下的当前时间点
	steady_clock::time_point t1 = steady_clock::now();	// 对于system_clock、high_resolution_clock也是一样的	
	// system_clock下,time_point与time_t表示的时间点的互相转换
	system_clock::time_point today = system_clock::now(); 
	time_t tt = system_clock::to_time_t (today);
	system_clock::time_point tp = system_clock::from_time_t (tt);
	// 获取某时钟下的当前时间点与时钟epoch的时间段
	t1.time_since_epoch();
	
// 2 时间段
	// 内置时间段类型
	std::chrono::hours			
	std::chrono::minutes			
	std::chrono::seconds
	std::chrono::microseconds
	std::chrono::microseconds
	std::chrono::nanoseconds 
	// 自定义时间段类型
	std::chrono::duration<int>						// 计数类型为int,默认单位是s
	std::chrono::duration<int,std::milli> 			// 计数类型为int,单位是 ms
   	std::chrono::duration<int,std::ratio<60*60>>	// 计数类型为int,单位是与s的比率,这里为hour
	// 将时间点的差转换为时间段
	std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1);	
	// 转换不同单位的时间段
	std::chrono::hours h(1);
	std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(h); 	
	// 获取时间段的计数值
	std::chrono::milliseconds foo (1000);
	foo.count();
	// 获取时长为0的时间段,并用于判断其他时间段是否为0
	steady_clock::duration::zero() == foo
	
// 3 时间点与时间段计算:时间点可以比较大小,可以互相加减,可以加减时间段;而时间段的操作则更多...就正常使用算术运算即可
	std::chrono::duration<int,std::ratio<60*60*24> > one_day (1);
	system_clock::time_point tomorrow = today + one_day;
	// ...
附注:C语言时间库time.h
	#include <ctime>
	// 返回当前程序运行时间
	clock_t time = clock(); 
	int sec = time/CLOCKS_PER_SEC; //获取对应的秒数
	
	// 返回系统当前时间
	time_t timer;	
	time(&timer); 	
	
	// 获取两时间点之间的秒数差
	time_t n1,n2; 
  	seconds = difftime(n1,n2);

	// 自定义时间点
	struct tm * timeinfo;
	int year, month ,day;
	timeinfo = localtime ( &timer );		// 获取描述时间的结构体,并修改,完全自定义也可以
	timeinfo->tm_year = year - 1900;
	timeinfo->tm_mon = month - 1;
	timeinfo->tm_mday = day;
	mktime ( timeinfo );

	// 按格式输出时间的字符串
	ctime (&timer);
附注:Linux时间库

#include <sys/time.h> 是Linux系统的时间库,其中包含了C语言的time.h

	#include <sys/time.h>
	struct timeval time;
	
	/* 获取时间,理论到us */
	gettimeofday(&time, NULL);
	printf("s: %ld, ms: %ld\n", time.tv_sec, (time.tv_sec*1000 + time.tv_usec/1000));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值