C语言每日一练
2021年11月6日
题目描述
用C语言计算程序运行时长(库函数)
分析
要获取程序运行时间,只需要在程序运行开始和结尾各获取一次系统时间,将他们相减即可求出运行时间。
使用C语言的时间函数,需要用到time.h
头文件,计算程序运行时间,可以考虑使用clock_t
系列函数或time_t
系列函数(这两个都是数据类型long int)。
- clock_t:
clock()
是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
------------------------------------clock_t clock(void) ;
------------------------------------
简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
#define CLOCKS_PER_SEC ((clock_t)1000)
——在linux
系统下,CLOCKS_PER_SEC
的值可能有所不同,使用的linux打印出来的值是1000000,表示的是微秒
。这一点需要注意。- time_t:
time()
是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。difftime
,计算机函数,用来返回两个time_t型变量之间的时间间隔,即计算两个时刻之间的时间差。
time_t time(time_t *t);
——如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。
double difftime(time_t time2, time_t time1);
——返回两个time_t型变量之间的时间间隔,即 计算两个时刻之间的时间差。
——百度百科
sleep()
:windows下,包含在windows.h
,原型:void Sleep(DWORD dwMilliseconds);
,单位毫秒(注意,是大写S)。
Linux下,包含在unistd.h
,原型unsigned int sleep(unsigned int seconds);
,单位秒。
代码实现
#include <stdio.h>
#include <time.h>
#include <windows.h>
int main()
{
clock_t ckt_start, ckt_end; //clock_t变量
time_t tt_start, tt_end; //time_t变量
double duration = 0; //运行时长
int i = 0;
ckt_start = clock(); //获取CPU时钟数
tt_start = time(NULL); //获取秒数
for(i = 0; i < 5; i++)
{
printf("%d ", i + 1);
Sleep(1000); //粗略延时
}
puts(""); //回车
/* 使用 clock_t 进行计时 */
ckt_end = clock(); //获取CPU时钟数
duration = (ckt_end - ckt_start) / CLOCKS_PER_SEC;
printf("clock_t:程序运行时长:%f 秒\n", duration);
duration = ckt_end - ckt_start;
printf("CLOCKS_PER_SEC = %d\n", CLOCKS_PER_SEC);
printf("clock_t:程序运行时长:%f 毫秒\n", duration);
/* 使用 time_t 进行计时 */
tt_end = time(NULL); //获取秒数
duration = difftime(tt_end, tt_start);
printf("time_t:程序运行时长:%f 秒\n", duration);
return 0;
}