- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux时间处理函数总结
Linux 时间处理函数总结
1. 关键字
UTC (世界标准时间),
Calendar Time (日历时间),
epoch (时间点),
clock tick (时钟计时单元)
2. 概念
Coordinated Universal Time (UTC ):协调世界时,又称为世界标
准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean
Time ,GMT )。比如,中国内地的时间与UTC 的时差为+8,也就
是UTC+8 。美国是UTC-5。
Calendar Time:日历时间,是用“从一个标准时间点到此时的时
间经过的秒数”来表示的时间。这个标准时间点对不同的编译器
来说会有所不同,但对一个编译系统来说,这个标准时间点是不
变的,该编译系统中的时间对应的日历时间都通过该标准时间点
来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一
个时区,在同一时刻对同一个标准时间点来说,日历时间都是一
样的。
epoch :时间点。时间点在标准C/C++ 中是一个整数,它用此时的
时间和标准时间点相差的秒数 (即日历时间)来表示。
clock tick :时钟计时单元(而不把它叫做时钟滴答次数),一个时
钟计时单元的时间长短是由CPU 控制的。一个clock tick 不是CPU
的一个时钟周期,而是C/C++的一个基本计时单位。
我们可以使用ANSI 标准库中的time.h 头文件。这个头文件中定义
的时间和日期所使用的方法,无论是在结构定义,还是命名,都
具有明显的C 语言风格。下面,我将说明在 C/C++ 中怎样使用日
期的时间功能。
3. 计时
3.1 clock()和clock_t
C/C++ 中的计时函数是clock(),而与其相关的数据类型是clock_t 。
clock_t clock( void );
这个函数返回从“开启这个程序进程”到“程序中调用 clock()函
数”时之间的CPU 时钟计时单元(clock tick )数,在MSDN 中称
之为挂钟时间(wall-clock )。其中 clock_t 是用来保存时间的数据
类型,在time.h 文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明显,clock_t 是一个长整形数。在time.h 文件中,还定义了一
个常量 CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计
时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每过千分之一秒(1 毫秒),调用clock ()函数返回的值
就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC
来计算一个进程自身的运行了多少秒:
void elapsed_time()
{
printf(Elapsed time:%u secs.\n,clock()/CLOCKS_PER_SEC);
}
当然,你也可以用clock 函数来计算你的机器运行一个循环或者处
理其它事件到底花了多少时间:
#i nclude “stdio.h ”
#i nclude “stdlib.h ”
#i nclude “time.h ”
int main( void )
{
long i =;
clock_t start, finish;
double duration;
/* 测量一个事件持续的时间*/
printf( Time to do %ld empty loops is , i );
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( %f seconds\n, duration );
system(pause);
}
在笔者的机器上,运行结果如下:
Time to doempty loops is 0.03000 second
文档评论(0)