计算程序运行时间的函数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上的例子及其执行结果:
首先调用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() ); }
相关文章推荐
- C语言如何计算程序运行时间
- R-Sys.time计算程序运行时间
- matlab中,计算,记录,程序运行,起始,结束 时间,间隔 &matlab中 tic,toc函数的用法
- C#计算程序运行时间的三种方法
- 3.3 C++中如何计算程序运行的时间
- 关于计算Java程序运行时间
- opencv 计算程序运行时间
- 计算程序运行时间(time_t, clock_t)
- 计算程序的运行时间(C++)
- C#计算程序运行时间
- C 语言基础——程序运行时间的计算
- LINUX计算程序运行时间
- 计算Python的代码块或程序的运行时间
- 程序计数器(计算运行该程序所需的时间)
- java中计算程序运行时间
- C语言中如何计算程序运行的时间
- 利用系统滴答时间计算实际程序运行时间
- 计算Python的代码块或程序的运行时间
- C++计算一个程序运行时间,精确到毫秒
- 如何利用windosAPI计算程序运行时间 不使用VC的库,也就是说不跨系统,跨编译器