有关程序计时方法的介绍

上传人:宝路 文档编号:48273049 上传时间:2018-07-12 格式:PPT 页数:21 大小:195.43KB
返回 下载 相关 举报
有关程序计时方法的介绍_第1页
第1页 / 共21页
有关程序计时方法的介绍_第2页
第2页 / 共21页
有关程序计时方法的介绍_第3页
第3页 / 共21页
有关程序计时方法的介绍_第4页
第4页 / 共21页
有关程序计时方法的介绍_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《有关程序计时方法的介绍》由会员分享,可在线阅读,更多相关《有关程序计时方法的介绍(21页珍藏版)》请在金锄头文库上搜索。

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

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

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

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

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

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

7、IME lpKernelTime, LPFILETIME lpUserTime ); Header: Windows.h Library: Kernel32.lib.当前进程的hProcess句柄可以用 HANDLE GetCurrentProcess(void); 获得精度:和第一种方法介绍的API可以到达的精度一样。方式三、获取进程CPU时间 The FILETIME structure is a 64-bit value representing the number of 100- nanosecond intervals since January 1, 1601 (UTC). ty

8、pedef struct _FILETIME DWORD dwLowDateTime; DWORD dwHighDateTime; FILETIME, *PFILETIME; 说白了就是一个64位无符号整数方式三、获取进程CPU时间用法: int main() FILETIME t1, t2, t3, t4; SYSTEMTIME t; GetProcessTimes( GetCurrentProcess(),FileTimeToSystemTime( printf(“Hour = %dtMin = %dtSec = %dtMs = %dn“, t.wHour, t.wMinute, t.wS

9、econd, t.wMilliseconds); 方式三、获取进程CPU时间 辅助API: BOOL FileTimeToSystemTime( const FILETIME* lpFileTime, LPSYSTEMTIME lpSystemTime ); Header: Windows.h Library: Use Kernel32.lib 将FileTime转换成SystemTime方式三、获取进程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; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; SYSTEMTIME, *PSYSTEMTIME;总结 前两种方式适合计时 最后一种方法适合统计程序运行时间 各种方法各有特点,应该灵活运行谢谢大家,如有不对,敬请指正

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号