有关程序计时方法的介绍_第1页
有关程序计时方法的介绍_第2页
有关程序计时方法的介绍_第3页
有关程序计时方法的介绍_第4页
有关程序计时方法的介绍_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、有关程序计时方法的介绍Yeung1讨论范围计算机中的时间相关服务(函数)的主要应用计时延时延时的主要内容和计时差不多,但和统计一个程序需要运行的时间不太相关,所以不做介绍2背景计算机是怎么获得时间的?时间是由谁提供的?有哪些途径可以访问到与时间相关的服务?3方式一、获取系统内部时间time_t time( time_t *timer ); From CRT library time 返回自1970年1月1日午夜(UTC),到现在为止所经过的秒数。 参数timer提供一个存储时间的地址指针,可以为NULL,表示无需存储。精度:1s4方式一、获取系统内部时间time使用:#include #inc

2、lude int main()time_t start = time(0);dosomething();printf(“Used Time = %d sn”, time(0) - start);return 0;5方式一、获取系统内部时间clock_t clock( void ); From CRT library clock返回当前进程运行时间,时间单位 由CLOCKS_PER_SEC决定。CLOCKS_PER_SEC表示1秒clock会增加的单位时间。精度:1/CLOCKS_PER_SEC注意:通常达不到6方式一、获取系统内部时间clock使用:#include #include int

3、main()clock_t start = clock();dosomething();printf(“Used Time = %.2lf sn”, (clock() start) / CLOCKS_PER_SEC);return 0;7方式一、获取系统内部时间以上提供的两个函数都来自CRT Library。下面介绍WINAPI中有关的计时API8方式一、获取系统内部时间DWORD GetTickCount(void); Header: Declared in Winbase.h; include Windows.h.Library: Use Kernel32.lib.GetTickCount

4、返回由系统开机到现在所经历的时间,单位毫秒。精度:1ms注意:实际达不到9方式一、获取系统内部时间DWORD timeGetTime(VOID); 来自多媒体计时器Header: Windows.hLibrary: Winmm.lib10方式二、高性能计时器(CPU时间戳)BOOLQueryPerformanceFrequency(LARGE_INTEGER*lpFrequency ); BOOLQueryPerformanceCounter(LARGE_INTEGER*lpPerformanceCount ); Header:Windows.hLibrary:Kernel32.lib来自CP

5、U内部的时间戳,也可以通过RDTSC指令获取时间戳11方式二、高性能计时器(CPU时间戳)LARGE_INTEGER 说白了就是一个64位无符号整数(unsigned _int64)为什么要定义这个数据结构,目的是为了向C向下兼容12方式二、高性能计时器(CPU时间戳)使用方法:int main()_int64 Frequency, Start, End;QueryPerformanceFrequency(LARGE_INTEGER*)&Frequency);QueryPerformanceCounter(LARGE_INTEGER*)&Start);dosomething();QueryPe

6、rformanceCounter(LARGE_INTEGER*)&End);double t = double(End - Start) / Frequency;printf(Used Time = %.2lf sn, t);13方式二、高性能计时器(CPU时间戳)缺点:前两种方式只适合计时使用,并不能很好统计程序运行了多久14方式三、获取进程CPU时间BOOL GetProcessTimes(HANDLE hProcess,LP lpCreationTime,LP lpExitTime,LP lpKernelTime,LP lpUserTime ); Header: Windows.hLib

7、rary: Kernel32.lib.当前进程的hProcess句柄可以用HANDLE GetCurrentProcess(void); 获得精度:和第一种方法介绍的API可以到达的精度一样。15方式三、获取进程CPU时间The structure is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). typedef struct _ DWORD dwLowDateTime;DWORD dwHighDateTime; , *P;说白了就是一个64位无符

8、号整数16方式三、获取进程CPU时间用法:int main() t1, t2, t3, t4;SYSTEMTIME t;GetProcessTimes(GetCurrentProcess(),&t1, &t2, &t3, &t4);(&t4, &t);printf(Hour = %dtMin = %dtSec = %dtMs = %dn, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds);17方式三、获取进程CPU时间辅助API:BOOL (const * lp,LPSYSTEMTIME lpSystemTime );Header: Windows.hLibrary: Use Kernel32.lib将转换成SystemTime18方式三、获取进程CPU时间The SYSTEMTIME structure represents a date and time using individual members for the month, day, year, weekday, hour, minute, second, and millisecond.typedef struct _SYSTEMTIME WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WOR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论