有关程序计时方法的介绍 Yeung.

Slides:



Advertisements
Similar presentations
1 第二讲 C++ 编程基础. 2 主要内容 C++ 语言概述 C++ 编程基础 数据的简单输入输出 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境.
Advertisements

软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
现代电子技术实验 ——综合实验之单片机部分
河內塔(Hanoi)問題.
C语言程序设计 主讲教师 :张群燕 电话:
电子成绩单项目实现.
Word高级应用——制作毕业论文 Word高级应用——制作毕业论文 6..
第一章 C语言概述 计算机公共教学部.
第九讲 类与对象 (I)面向对象基础.
第八章 类和对象.
寫 作 教 學 6 電腦與我 時代改變,科技進步,電腦成為日常生活不可或缺的設備。我是二十一世紀的E世代少年,一隻滑鼠在手,樂趣無窮。
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
C++程序设计 王希 图书馆三楼办公室.
计算机基础知识 丁家营镇九年制学校 徐中先.
中间件 定义:中间件是介于应用与操作系统之间的系统软件,是相关应用的基准平台 三大基础软件:操作系统、数据库、中间件
C语言程序设计 第十二章 位运算.
高级语言程序设计 主讲人:陈玉华.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
核探测与核电子学国家重点实验室 报告人:董磊 指导老师:宋克柱
啟示錄.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
If … else 選擇結構 P27.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第4讲 Windows编程基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
STRUCTURE 授課:ANT 日期:2010/5/12.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 6 章 函式.
网络游戏开发语言基础 ——Windows程序设计
第二章 基本元素、类型和概念 七、输出函数printf 八、输入格式转换函数scanf.
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
第三节 整数类型.
計數式重複敘述 for 迴圈 P
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第六章 安全衛生工作守則 6-1 前 言  6-2 訂定依據相關法令規定  6-3 工作守則製作程序及製作前應注意事項  6-4 如何訂定適合需要之安全衛生工作守則  6-5 結 論.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第4章 Excel 2007电子表格.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
第11章 位运算 为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。 所谓位运算是指,按二进制位进行的运算。 11.1 数值在计算机中的表示 11.2.
函式庫補充資料.
指標
第四章 类 4.1 基础知识 4.2 构造函数 4.3 方法 4.4 属性与索引 4.5 String类
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 类型、对象、运算符和表达式.
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
#include <iostream.h>
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
結構、檔案處理(Structure, File)
第十二章 位运算.
目录 12.1 位运算符 12.2 位域(位段) 1.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
函式庫補充資料 1.
隨機函數.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

有关程序计时方法的介绍 Yeung

讨论范围 计算机中的时间相关服务(函数)的主要应用 计时 延时 延时的主要内容和计时差不多,但和统计一个程序需要运行的时间不太相关,所以不做介绍

背景 计算机是怎么获得时间的? 时间是由谁提供的? 有哪些途径可以访问到与时间相关的服务?

方式一、获取系统内部时间 time_t time( time_t *timer ); From CRT library <time.h> time 返回自1970年1月1日午夜(UTC),到现在为止所经过的秒数。 参数timer提供一个存储时间的地址指针,可以为NULL,表示无需存储。 精度:1s

方式一、获取系统内部时间 time使用: #include <stdio.h> #include <time.h> int main() { time_t start = time(0); dosomething(); printf(“Used Time = %d s\n”, time(0) - start); return 0; }

方式一、获取系统内部时间 clock_t clock( void ); From CRT library <time.h> clock返回当前进程运行时间,时间单位 由CLOCKS_PER_SEC决定。 CLOCKS_PER_SEC表示1秒clock会增加的单位时间。 精度:1/CLOCKS_PER_SEC 注意:通常达不到

方式一、获取系统内部时间 clock使用: #include <stdio.h> #include <time.h> int main() { clock_t start = clock(); dosomething(); printf(“Used Time = %.2lf s\n”, (clock() – start) / CLOCKS_PER_SEC); return 0; }

方式一、获取系统内部时间 以上提供的两个函数都来自CRT Library。 下面介绍WINAPI中有关的计时API

方式一、获取系统内部时间 DWORD GetTickCount(void); Header: Declared in Winbase.h; include Windows.h. Library: Use Kernel32.lib. GetTickCount返回由系统开机到现在所经历的时间,单位毫秒。 精度:1ms 注意:实际达不到

方式一、获取系统内部时间 DWORD timeGetTime(VOID); 来自多媒体计时器 Header: Windows.h Library: Winmm.lib

方式二、高性能计时器(CPU时间戳) BOOL QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency ); BOOL QueryPerformanceCounter (LARGE_INTEGER *lpPerformanceCount ); Header: Windows.h Library: Kernel32.lib 来自CPU内部的时间戳,也可以通过RDTSC指令获取时间戳

方式二、高性能计时器(CPU时间戳) LARGE_INTEGER 说白了就是一个64位无符号整数(unsigned __int64)

方式二、高性能计时器(CPU时间戳) 使用方法: int main() { __int64 Frequency, Start, End; QueryPerformanceFrequency((LARGE_INTEGER*)&Frequency); QueryPerformanceCounter((LARGE_INTEGER*)&Start); dosomething(); QueryPerformanceCounter((LARGE_INTEGER*)&End); double t = double(End - Start) / Frequency; printf("Used Time = %.2lf s\n", t); }

方式二、高性能计时器(CPU时间戳) 缺点: 前两种方式只适合计时使用,并不能很好统计程序运行了多久

方式三、获取进程CPU时间 BOOL GetProcessTimes( HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME 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). typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME; 说白了就是一个64位无符号整数

方式三、获取进程CPU时间 用法: int main() { FILETIME t1, t2, t3, t4; SYSTEMTIME t; GetProcessTimes( GetCurrentProcess(), &t1, &t2, &t3, &t4 ); FileTimeToSystemTime(&t4, &t); printf("Hour = %d\tMin = %d\tSec = %d\tMs = %d\n", t.wHour, t.wMinute, t.wSecond, t.wMilliseconds); }

方式三、获取进程CPU时间 辅助API: BOOL FileTimeToSystemTime( Header: Windows.h 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;

总结 前两种方式适合计时 最后一种方法适合统计程序运行时间 各种方法各有特点,应该灵活运行

谢谢大家,如有不对,敬请指正