计算程序运行时间的函数clock()

来源:互联网 发布:linux怎么运行sh脚本 编辑:程序博客网 时间:2024/04/27 10:23
        好几次看到网上有人将各种排序方法用执行时间来进行比较,但一直不知道执行时间是怎么计算出来的,或者说执行时间是调用什么函数才能得到的。今天在做关于大数的问题时,想要计算一下程序执行的时间,经过网上搜索,才发现资料挺多,也知道了clock()这个函数。下面就对clock()这个函数做一下解析。
首先调用clock()时,必须先包含头文件 <time.h>。
其次,在这个头文件中,定义了一个存放时间值的类型clock_t如下:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
可见所谓的clock_t就是一个long型数据。我们要用的clock()的返回值就是一个clock_t类型。其函数原型如下:
clock_t clock( void );
如果函数调用成功返回从进程开始到调用该函数的响应时间又称为(墙上时间(wall-clock time)或流逝时(elapsed time))
程序的响应时间包括两部分:CPU实际执行程序的时间(称为CPU时间)和进程等待时间,其中进程等待时间包括由于进程调度而必须延迟的时间(即进程在就绪态的时间)和其他等待时间,如磁盘等待、I/O等待或等待某个外部事件发生等等;CPU执行程序的时间又可以包含两部分:CPU执行本程序代码的时间和CPU执行操作系统代码的时间(如进程调度代码,提供给用户进程的I/O代码等等)。
现在我们知道clock()返回的是一个时间值,我们还需要知道这里时间的单位是什么。在MSDN中查看clock()时有这么一句话:A timer tick is approximately equal to 1/CLOCKS_PER_SEC second. 
也就是说计时器执行一次时间等于1/CLOCKS_PER_SEC。CLOCKS_PER_SEC也是在<time.h>中定义的,如下所示:
#define CLOCKS_PER_SEC  1000
所以计时器执行一次时间等于1毫秒。

最后,来看一下MSDN上的例子及其执行结果:

#include <stdio.h>#include <stdlib.h>#include <time.h>void sleep( clock_t wait );int main( void ){   long    i = 60000000L;   clock_t start, finish;   double  duration;   // Delay for a specified time.   printf( "Delay for three seconds\n" );   sleep( (clock_t)3 * CLOCKS_PER_SEC );   printf( "Done!\n" );   // Measure the duration of an event.   printf( "Time to do %ld empty loops is ", i );   start = clock();   while( i-- ) ;   finish = clock();   duration = (double)(finish - start) / CLOCKS_PER_SEC;   printf( "%2.1f seconds\n", duration );}// Pauses for a specified number of milliseconds.void sleep( clock_t wait ){   clock_t goal;   goal = wait + clock();   while( goal > clock() );}



0 0
原创粉丝点击