您的位置:首页 > 其它

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

2014-03-06 15:32 225 查看
好几次看到网上有人将各种排序方法用执行时间来进行比较,但一直不知道执行时间是怎么计算出来的,或者说执行时间是调用什么函数才能得到的。今天在做关于大数的问题时,想要计算一下程序执行的时间,经过网上搜索,才发现资料挺多,也知道了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() );
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: