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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值