time(NULL)和clock()区别与分析

①本质区别
time(NULL)是指返回从1970年1.1日(元旦)午夜0点到现在的秒数 实际时间
clock clock是进程使用的cpu时间,作用不大。 处理器时间或频率,

②返回值区别
time()得到的是秒做单位的
clock()得到的是毫秒做单位的, 因此通常 (double)clock()/CLOCKS_PER_SEC

time (null) 计算计算机的时间
clock 常粗略的计算任务的执行速度

③宏解释

define CLK_TCK CLOCKS_PER_SEC

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);
}

time()
主要用来获取当前的系统时间,返回的结果是一个time_t类型,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime函数将 time_t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。

④ 实用
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

include

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。

time 实用
while(n>0)
{
long t = time(NULL)
t += 1;
while(t cout< n--;
}

你可能感兴趣的:(time(NULL)和clock()区别与分析)