C语言获取程序运行时间

所需头文件:"time.h"

所需函数:clock

函数原型:

clock_t __cdecl clock(void);

函数介绍:

用于获取程序启动时间到这次调用clock函数的CPU占用时间

其在time文件里还有一个宏叫#define CLOCKS_PER_SEC ((clock_t)1000)

用于衡量秒的单位,1000也就是千分之一秒,也就是当过了一毫秒clock会自动增加1

在其他操作系统下可能各有不同,但是可以经过时间汇率换算出相应的秒差,在计算之前可以用printf打印看一下

返回值:

clock_t //long 长整型

用法:

	clock_t start, finish;     //定义第一次调用CPU时钟单位的实际,可以理解为定义一个计数器
	double Total_time;        //定义一个double类型的变量,用于存储时间单位
	start = clock();        //获取进入要测试执行时间代码段之前的CPU时间占用值
     int i = 100000L;while (i--);    //循环 0假
finish = clock();    //获取执行完后的CPU时间占用值Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成毫秒printf("\n函数运行时间:%0.3f毫秒 \n", Total_time); //打印小数点的后三位,毫秒为单位,计算机最低以皮秒-纳秒等为最低单位getchar();return 0;

运行结果:


这里要解释一下这段代码

Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成毫秒

上面说过clock是获取程序启动到调用clock这个函数时所用的CPU占用时间,怎么获取?

答:PCB进程控制块里有一个clock_t 的成员变量,当你程序获取到CPU控制权时该值会不断递增,不以秒为单位以CPU赫兹执行你代码频率为单位的递增!

clock会把这个值并根据宏定义的CLOCKS_PER_SEC来进行毫秒单位转换,假如clock_t是1000,那么CLOCKS_PER_SEC也是1000,clock就会返回给你1毫秒!

clock以毫秒为单位

这里我们要计算的是要测试的代码执行时间,而非程序运行时间!

所以我们要把程序执行要测试的代码之前的时间段保存下来:

start = clock();        //获取进入要测试执行时间代码段之前的CPU时间占用值

然后在执行,执行完以后在程序总执行时间

 int i = 100000L;while (i--);    //循环 0假	finish = clock();    //获取执行完后的CPU时间占用值

最后在用程序总执行时间减去程序执行要测试代码段之前的执行时间的时间得到程序执行要测试代码的时间!

Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成毫秒

后面的除去CLOCKS_PER_SEC,因为clock_t是长整型 long,返回的是整形,所以这里我们要以(double)类型转换以浮点数类型返回,然后除去1000,得到毫秒单位!

假如finish是135毫秒(上面说clock函数会根据PCB进程控制块里的clock_t成员变量值以1000为换算单位,换算成毫秒),start是75毫秒,代码段执行时间是60毫秒(135-75),如果直接以double类型返回就是60.00000000,除去换算单位:1000,也就得到:0.06000000,也就是60毫秒,打印时0.3f,用于控制打印输出格式,因为我们只要小数点后三位,1秒=1000毫秒,即可得出换算单位!


猜你喜欢

转载自blog.csdn.net/bjbz_cxy/article/details/80499906