计时函数clock()

CLOCKS_PER_SEC是标准c的time.h头函数中宏定义的一个常数,用于将clock()函数的结果转化为以秒为单位的量,但是这个量的具体是是与操作系统相关的。

VC++6.0中time.h下 宏定义的 常量。其值为1000。VC++6.0中该 符号常量定义如下:
#define CLOCKS_PER_SEC 1000
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函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main(void)
{
long i = 10000000L;
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");
return 0;
}
这是一个求时间差的程序,那么为什么要除以CLOCKS_PER_SEC呢?  这是因为clock()是以毫秒为单位,要正确输出时间差需要把它换成秒,因此需要除以CLOCKS_PER_SEC。  clock()函数计算出来的是硬件滴答的数目,不是毫秒。在TC2.0中硬件每18.2个滴答是一秒,在VC++6.0中硬件每1000个滴答是一秒。
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
下面是一个更为简单的例子:
#include <stdio.h>
#include <time.h>
int main()
{
int n = 10000000;
while(n--);
printf("%f\n",clock()/(double)CLOCKS_PER_SEC);
return 0;
}
在VC++6.0中可以用 CLK_TCK替换CLOCKS_PER_SEC。

你可能感兴趣的:(计时函数clock())