C语言中常用计时方法总结
来源:互联网 发布:周小平扒皮网络大v 编辑:程序博客网 时间:2024/06/06 09:53
转载 http://blog.csdn.net/fz_ywj/article/details/8109368
C语言中常用计时方法总结
1. time()
头文件:time.h
函数原型:time_t time(time_t * timer)
功能:返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。
用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
用difftime函数可以计算两个time_t类型的时间的差值,可以用于计时。用difftime(t2,t1)要比t2-t1更准确,因为C标准中并没有规定time_t的单位一定是秒,而difftime会根据机器进行转换,更可靠。
用法:
- time_t start,end;
- start =time(NULL);//or time(&start);
- //…calculating…
- end =time(NULL);
- printf("time=%d\n",difftime(end,start));
2. clock()
头文件:time.h
函数原型:clock_t clock(void);
功能:该函数返回值是硬件滴答数,要换算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000。
用法:
- clock_t start,end;
- start = clock();
- //…calculating…
- end = clock();
- printf("time=%f\n",(double)end-start)/CLK_TCK);
3. timeGetTime()
WIN32API
头文件:Mmsystem.h 引用库: Winmm.lib
函数原型:DWORD timeGetTime(VOID);
功能:返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。
用法:
- DWORDstart,end;
- start= timeGetTime();
- //…calculating…
- end= timeGetTime();
- printf("time=%d\n",end-start);
4. GetTickCount()
WIN32API
头文件:windows.h
函数原型:DWORD WINAPI GetTickCount(void);
功能:返回自设备启动后的毫秒数(不含系统暂停时间)。
用法:
- DWORDstart,end;
- start= GetTickCount();
- //…calculating…
- end= GetTickCount();
- printf("time=%d\n",end-start);
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
WIN32API
头文件:windows.h
函数原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者获得的是CPU从开机以来执行的时钟周期数。后者用于获得你的机器一秒钟执行多少次,就是你的时钟周期。
补充:LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定:
- typedef union_LARGE_INTEGER
- {
- struct
- {
- DWORD LowPart ;
- LONG HighPart;
- };
- LONGLONG QuadPart ;
- }LARGE_INTEGER;
用法:
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
- LARGE_INTEGER num;
- longlong start,end,freq;
- QueryPerformanceFrequency(&num);
- freq=num.QuadPart;
- QueryPerformanceCounter(&num);
- start= num.QuadPart;
- //…calculating…
- QueryPerformanceCounter(&num);
- end= num.QuadPart;
- printf("time=%d\n",(end-start)*1000/freq);
6. gettimeofday()
Linux C函数。
头文件:sys/time.h
函数原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
说明:其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
timeval的定义为:
- struct timeval {
- long tv_sec; // 秒数
- long tv_usec; //微秒数
- }
用法:
- struct timeval start,end;
- gettimeofday(&start, NULL );
- //…calculating…
- gettimeofday(&end, NULL );
- long timeuse =1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
- printf("time=%f\n",timeuse /1000000.0);
7. RDTSC - 读取时间标签计数器
X86架构CPU汇编指令。
操作码:0F 31 指令:RDTSC
功能:将时间标签计数器读入 EDX:EAX寄存器中。
说明:在Pentium以上的CPU中,提供了一条机器指令RDTSC来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用:
- inline unsigned long longGetCycleCount()
- {
- __asm RDTSC
- }
- inline unsigned long long GetCycleCount()
- {
- __asm _emit 0x0F
- __asm _emit 0x31
- }
- #ifdef WIN32
- #include <windows.h>
- #else
- #include <sys/unistd.h>
- #endif
- inline unsigned long long GetNTime()
- {
- __asm("RDTSC");
- }
- static double hz=0.0;
- void init_timer()
- {
- longlong t1=GetNTime();
- #ifdef WIN32
- Sleep(1000);
- #else
- sleep(1);
- #endif
- longlong t=GetNTime()-t1;
- hz=(double)t/1000000000;
- printf("hz=%fGhz\n",hz);
- }
- long long u_timer(long long *t,int mode)
- {
- if(hz<0.001)
- init_timer();
- if(!mode)
- {
- *t=GetNTime();
- return0;
- }
- longlong t1=GetNTime()-*t;
- t1/=hz;
- longlong ns=t1%1000;
- longlong us=(t1/1000)%1000;
- longlong ms=(t1/1000000)%1000;
- longlong s=t1/1000000000;
- printf("time=");
- if(s!=0)
- printf("%llds",s);
- if(ms!=0)
- printf("%lldms",ms);
- if(us!=0)
- printf("%lldus",us);
- if(ns!=0)
- printf("%lldns",ns);
- printf("\n");
- *t=GetNTime();
- returnt1;
- }
- 本文已收录于以下专栏:
BjarneCpp
2017-07-03 16:34 2楼- 写的非常好
- 回复
lqxandroid2012
2016-05-23 10:40 1楼- gettimeofday能在Linux 驱动中用吗?
- 回复
相关文章推荐
c语言中如何添加计时函数,统计程序执行的时间
这里举一个例子,行优先和列优先遍历二维数组的程序执行时间比较,这里需要调用 time.h 编译环境为vs2013#define M 10000000#define N 10short a[M][...- baidu_36856113
- 2016年12月09日 16:55
- 3958
C语言中的计时方法:time
在Linux中用C语言计时可以用很多方法。 1. 可用使用C语言库自带的clock()进行计时。如: #include #include using namespa...- DC_Neo
- 2012年09月14日 12:50
- 1786
一个普通程序员的内心独白....躺枪!躺枪!
我,一个普普通通程序员,没有过人的天赋,没有超乎寻常的好运,该如何逆袭走上人生巅峰?
Delphi7高级应用开发随书源码
- 2003年04月30日 00:00
- 676KB
- 下载
C语言计时器的使用
1.如果是想使用秒级别的技术,可用使用C语言库time.h>自带的clock()进行计时。如: #include iostream> #include time.h> u...- darennet
- 2014年10月30日 09:01
- 821
C语言中常用计时方法总结
C语言中常用计时方法总结1. time()头文件:time.h函数原型:time_t time(time_t * timer)功能:返回以格林尼治时间(GMT)为标准,从1970年1月1...- shine_journey
- 2016年03月25日 11:05
- 1528
程序员跨越式成长指南
完成第一次跨越,你会成为具有一技之长的开发者,月薪可能翻上几番; 完成第二次跨越,你将成为拥有局部优势或行业优势的专业人士,获得个人内在价值的有效提升和外在收入的大幅跃迁……
C语言给函数计时
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:clock_t clock( void );这个函数返回从“开启这个程序进程”...- leohxj
- 2010年06月29日 20:22
- 7624
C语言中对程序运行计时
使用time()函数。它在头文件time.h中具体使用方法如下:time_t a,b;//time_t是表示时间的结构体,你可以在time.h中找到它的原型。a=time(NULL);//...- Bruce_imu
- 2012年10月10日 21:07
- 1127
C语言时间差计算函数clock() 与 time ()用法分析
在很多情况下,为了评判某个算法,函数的优劣,特别是比较同一个功能的两个函数的效率高低时,我们经常通过计算耗费时间作为判断标准。C语言中有两个相关的函数用来计算时间差,分别是:time_t time(...- linpengbin
- 2015年02月03日 20:00
- 9924
c语言中关于时间的函数
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的...- sven_007
- 2012年06月26日 10:00
- 3293
C语言time.h中clock()函数的使用
C语言中求程序执行的时间可以使用clock()函数,_CRTIMP clock_t __cdecl __MINGW_NOTHROW clock (void);(可以把它直接视为clock_t cloc...- wangluojisuan
- 2011年12月05日 20:48
- 23730
C语言再学习 -- 时间函数
在软件设计中经常会用到关于时间的处理,用来计算语句、函数的执行时间,这时就需要精确到毫秒甚至是微妙的时间。我们首先来介绍一下,时间单位:时间单位还有:毫秒(ms)、微秒 (μs)、纳秒(ns)、皮...- qq_29350001
- 2017年01月14日 16:46
- 1421
C语言中常用"计时"方法总结
C语言中常用计时方法总结 1. time() 头文件:time.h 函数原型:time_t time(time_t * timer) 功能:返回以格林尼治时间(GMT)为标准,从1970年1月...- suifenghahahaha
- 2017年05月09日 17:11
- 400
c ms/毫秒级 计时 及time.h 其它函数详解
C/C++中的日期和时间 摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向...- onezeros
- 2009年09月16日 18:32
- 20714
C\C++中计时、延时函数
C\C++标准库中提供了两种计时函数clock()和time()。其用法如下: (1)clock()函数用法void timeConsume(){ double start,stop,...- keith_bb
- 2016年11月06日 18:25
- 9437
C/C++ 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5 种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及cloc...- u010962810
- 2013年10月07日 15:53
- 2858
Windows 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock...- MoreWindows
- 2011年10月09日 10:42
- 46703
C语言写的一个钟表(很炫哦)
下面是源代码: #include#include#include#include#define PI 3.1415926#define x 320#define y 240int main(){ in...- Terry001
- 2007年09月15日 21:15
- 1866
C语言写的一个电子时钟
C语言的电子时钟- qq_34400232
- 2017年03月05日 14:58
- 1238
C语言控制台的数字时钟
转自:http://hi.baidu.com/csxwczj/item/68cd6e0f056da6eaf55ba67f/*TC2.0编译*/#include #include #inclu...- qugename
- 2013年04月07日 22:04
- 1543
C语言编写时钟程序
使用C语言编写的时钟程序,TC下通过,VC需要有graphics包,这个包可以去easyx下载,下载地址为:http://www.easyx.cn/downloads/,下载下来安装就可以了。以下...- u010394032
- 2013年11月03日 18:03
- 2900
- C语言中常用计时方法总结
- C语言中常用计时方法总结
- C语言中常用计时方法总结
- C语言中常用计时方法总结
- C语言中常用"计时"方法总结
- C语言中常用计时方法总结
- C语言中常用计时方法总结
- C语言中常用的计时方法
- C语言中计时的方法
- C语言中一个简单的计时方法
- C语言中的计时方法:time
- C语言中对程序运行计时
- linux C语言 计时
- linux C语言 计时
- C语言计时函数
- C语言计时函数
- C语言计时函数
- 总结一下C/C++程序中几种常用的计时函数
- JavaScript.键盘事件处理.禁止后退键
- C# TcpClient网络编程传输文件(带文件名)(必须看)
- opengl编程glsl-纹理
- Ajax跨域请求COOKIE无法带上的解决办法
- python 错误总结
- C语言中常用计时方法总结
- Leetcode算法学习日志-48 Rotate Image
- 数据结构第十周项目——验证算法(三)
- Sqlplus,设置 不换行,列宽,隐藏标题
- iOS
- 曼彻斯特编码
- vue之watch用法
- 实现ajax的队列请求
- 第12周【项目