计算程序运行时间的函数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毫秒。
首先调用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
- 计算程序运行时间的函数clock()
- 计算程序运行时间的函数Sleep,clock,GetTickCount,QueryPerformanceCounter
- 计算程序运行时间 C语言 clock()函数
- 计算程序运行时间函数的选择
- c++中计算运行时间 clock(),clock_t程序
- 利用clock()函数计算一段代码运行消耗的时间(C语言)
- 计算程序/函数运行时间
- 用clock函数来记录程序运行时间
- c语言中统计程序运行时间用clock函数
- 关于clock()计算进程运行的时间以及time()
- 关于clock()计算进程运行的时间以及time()
- 计算程序运行的时间
- 计算程序运行的时间
- 计算程序的运行时间
- 计算程序运行的时间
- 计算程序的运行时间
- 计算程序运行的时间
- 计算程序的运行时间
- fatal error LNK1103: debugging information corrupt; recompile module
- [Java]吉他谱浏览器 0.1
- treap分离合并 区间操作 poj 3468
- UIApplicationDelegate详解
- Android底部菜单栏(用TabHost一次性加载耗内存)
- 计算程序运行时间的函数clock()
- 【SQL Server DBA】日常巡检1:数据库空间、状态、使用的监控
- 笔记2(字符串翻转)
- OCP-1Z0-053-V13.02-445题
- android 语言国际化 + 点击按钮出现menu + 点击menu出现dialog对话框 + radiobutton 点击事件
- zeromq
- xml、properties配置文件的读取
- 分治法,循环赛日程表
- jquery学习心得,常用的操作