1、 gettimeofday 函数计时
gettimeofday 是一个库函数,包含在 time.h 中。它的功能是查询系统时钟,以确定当前的日期和时间。相对于间隔计数的小适用范围和周期计数的麻烦性, gettimeofday 是一个可移植性更好相对较准确的方法。它的原型如下:
struct timeval
{
long tv_sec; // 秒 域
long tv_usec; // 微妙域
}
int gettimeofday( struct timeval *tv, NULL);
这个机制呢,具体的实现方式在不同系统上是不一样的,而且具体的精确程度是和系统相关的:比如在 Linux 下,是用周期计数来实现这个函数的,所以和周期计数的精确度差不多,但是在Windows NT 下,是使用间隔计数实现的,精确度就很低了。
具体使用,就是在要计算运行时间的程序段之前和之后分别加上 gettimeofday( &tvstart, NULL) 、 gettimeofday( &tvend, NULL) ,然后计算:
(tvend.tv_sec-tvstart.tv_sec)+(tvend.tv_usec-tvstart.tv_usec)/1000000
就得到了以秒为单位的计时时间。
2、clock 函数
clock 也是一个库函数,仍然包含在 time.h 中,函数原型是:
clock_t clock( void );
功能:返回自程序开始运行的处理器时间,如果无可用信息,返回 -1 。转换返回值若以秒计需除以 CLOCKS_PER_SECOND 。(注:如果编译器是 POSIX 兼 容的, CLOCKS_PER_SECOND 定义为 1000000 。)
使用 clock 函数也比较简单:在要计 时程序段前后分别调用 clock 函数,用后一次的返回值减去前一次的返回值就得到运行的处理器时间,然后再转换为秒。举例如下:
clock_t starttime, endtime;
double totaltime;
starttime = clock();
…
endtime = clock();
totaltime = (double)( (endtime - starttime)/(double)CLOCKS_PER_SEC );
3、 time 函数
在 time.h 中还包含另一个时间函 数: time 。文献 [6] 对其进行了详细的介绍。通 过 time() 函数来获得日历时间( Calendar Time ),其原型为: time_t time( time_t * timer ) 。通过difftime 函数可以计算前后 两次的时间差: double difftime( time_t time1, time_t time0 ) 。用 time_t 表示的时间(日历时 间)是从一个时间点(例如: 1970 年 1 月 1 日 0 时 0 分 0 秒)到此时的秒数,则此函数的前后两次时间差也是以秒为单位。
比如:
time_t startT, endT;
double totalT;
startT = time( NULL );
…
endT = time( NULL );
totalT = difftime( startT, endT);