定时函数的应用综述_第1页
定时函数的应用综述_第2页
定时函数的应用综述_第3页
定时函数的应用综述_第4页
定时函数的应用综述_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

定时函数的应用综述定时函数的应用综述 当我们在衡量一个函数的运行时间 或者是判断一个算法的时间效率 或者在程序中我们 需要一个定时器来定时执行一个特定的操作 如闹铃 时钟 多媒体 游戏动画等 都要 用到时间函数 编译器和时间函数为我们提供了很多时间函数 而这些函数的精度和用法 也是各不相同的 下面我们就对几种常见的定时函数进行比较 详述 1 Sleep 函数 用法精度原理及说明备注 VOID Sleep DWORD dwMilliseconds 休眠的毫秒数 Sleep 函数是使调用 Sleep 函数的线程休眠 线程主动放弃时间片 当经过指定的时间间 隔后 再启动线程 继续执行代码 Sleep 函 数并不能起到定时的作用 主要作用是延时 在一些多线程中可能会看到 Sleep 0 其主要 目的是让出时间片 Sleep 1000 休眠一秒钟 其精度 很低 系统越 忙 精 度越低 其精度 取决于 当前线 程及其 他线程 的优先 级以及 线程数 量等因 素 当你要创建一个窗口是使用这个函数必须要 小心 因为当一个进程创建一个窗口时 它 必须处理消息 而消息广播被发送到系统所 有的窗口中 这时你如果在一个线程中使用 了 Sleep 函数来无限延迟 可能会导致系统死 锁 所以在此时你可以应用函数 MsgWaitForMultipleObjects 或 MsgWaitForMultipleObjectsEx 来代替 Sleep MSDN 2 MFC 中的 timer 事件 用法精度原理及说明备注 先使用 SetTimer 来定时 再在程序中增加定时响应函数 OnTimer 并在此函数中增加相 应的处理语句完成时间到时的操 作 精度在毫秒级 别 一般其响 应时间为 55ms 且系统 越忙精度越差 原理与 Sleep 一样 不同 的是 timer 是一个定时器 可以指定回调函数 默 认为 OnTimer 常用于做 电子时钟 或者在游 戏动画中 使用它 3 C 中的 Time 应用 用法精度原理及说明备注 time t t time Time 函数是获取当前时间 秒级别用于获取当前 时间 比如我们做一个电子 时钟 就可以用它来 获取系统当前时间 4 COM 中的 COledateTime COleDateTimeSpan 类的使用 用法精 度 原理及说明备注 COleDateTime start time COleDateTime GetCurrentTime COleDateTimeSpan end time COleDateTime GetCurrentTime start time While end time GetTotalSeconds 2 处理延时或定时期间能处理其他的消息 DoSomething end time COleDateTime GetCurrentTime start time 秒 级 别 以上代表延时 2 秒 而这两 秒内我们可以 循环调用 DoSomething 从而实现在 延时的时候我 们也能够处理 其他的函数 或者消息 COleDateTime CO leDateTimeSpan 是 MFC 中 CTime CTimeSpan 在 COM 中的应用 所以 上面的方法对 于 CTime CTimeSpa 同样有效 5 C 语言中的时钟周期 clock 的使用 用法精度原理及说明备注 clock t start clock Sleep 100 clock t end clock double d double start end CLOCKS PER SEC ms 级别 对 于短时间内 的定时或者 延时可以达 到 ms 级别 对于时间比 较长的定时 或者延迟精 度还是不够 原理 clock 是获取计算机 启动后的时间 间隔 在 windows 下 CLOCKS PER SEC 为 1000 6 Windows 下的 GetTickCount 的使用 用法精度原理及说明备 注 DWORD start GetTickCount Sleep 100 DWORD end GetTickCount 其时间精度要比 clock 高 Windows NT 3 5 以后 10ms Windows NT 3 1 16ms Windows 95 and later 55ms GetTickCount 是获取系统启动后的时 间间隔 通过进入函数开始定时 到 退出函数结束定时 从而可以判断出 函数的执行时间 这种时间也并非是 函数或者算法的真实执行时间 因为 在函数和算法线程不可能一直占用 CPU 对于所有判断执行时间的函数 都是一样 不过基本上已经很准确 可以通过查询进行定时 GetTickCount 和 Clock 函数是向主 板 BIOS 要 real time clock 时间 会有 中断产生 以及延迟问题 常 用 于 多 媒 体 7 Windows 下的 timeGetTime 使用 用法精度原理及说明备注 timeBeginPeriod timeEndPeriod 必须成对出 现 需要包含 Mmsystem h Windows h 加入静态库 Winmm lib timeBeginPeriod 1 DWORD start timeGetTime Sleep 100 DWORD end timeGetTime timeEndPeriod 1 毫秒 与 GetTickCount 相当 但是和 GetTickCount 相比 timeGetTime 可以 通过 timeBeginPeriod timeEndPeriod 设 置定时器的最小解 析精度 timeGetTime 也时常用于多 媒体定时器中 可以通过查询 进行定时 通 过查询进行定 时 本身也会 影响定时器的 定时精度 Windows CE 下需要包含需 要包含 Mmsystem h Windows h 加入静态库 mmtimer lib 8 Windows 下的 TimeSetEvent 函数的使用 用法精 度 原理及说明备注 timeBeginPeriod timeEndPeriod 置定时器的最小 解析精度必须成 对出现 需要包含 Mmsystem h Windows h 加 入静态库 Winmm lib 需要调用 timeGetDevCaps timeBeginPeriod 然后调用 TimeSetEvent 最后调用 timeKillEvent 定义一个回调函数 static VOID CALLBACK StopwatchTimer UINT uTimerID UINT uMsg DWORD PTR dwUser DWORD PTR dw1 DWORD PTR dw2 毫 秒 Timer 是一个定时器 而以上我 们提到几种时间函数或者类型 实现定时功能只能通过轮训来实 现 也就是必须另外创建一个线 程单独处理 这样会影响定时精 度 好在 windows 提供了内置的 定时器 timeSetEvent 具体应用 时 可以通过调用 timeSetEvent 函数 将需要周期 性执行的任务定义在 lpFunction 回调函数中 如 定时采样 控制 等 从而完成所需处理的事件 需要注意的是 任务处理的时间 不能大于周期间隔时间 另外 在定时器使用完毕后 应及时调 用 timeKillEvent 将之释放 原理 可以理解为代回调函数的 timeGetTime Windows CE 下 需要包含需要包 含 Mmsystem h Windows h 加入静态库 mmtimer lib 9 高精度时控函数 QueryPerformanceFrequency QueryPerformanceCounter 使用 用法精度原理及说明备 注 LARGE INTEGER m nFreq LARGE INTEGER m nBeginTime LARGE INTEGER nEndTime QueryPerformanceFrequency 获取时钟周期 QueryPerformanceCounter 获取时钟计数 Sleep 100 QueryPerformanceCounter cout nEndTime QuadPart m nBeginTime QuadPart 1000 m nFreq QuadPart TextOut 100 100 This is a test 消息响应函数 在该函数中处理你想有响应的事件 3 TimeSetEvent 函数 加入静态链接库 Winmm lib Windows xp mmTimer lib Windows CE include 已经包含了的头文件 include define ONE MILLI SECOND 100 定义 1ms 和 2s 时钟间隔 以 ms 为单位 define TWO SECOND 2000 define TIMER ACCURACY 1 定义时钟分辨率 以 ms 为单位 UINT wTimerRes 1ms wTimerRes 2s 定义时间间隔 UINT wAccuracy 定义分辨率 UINT TimerID 1ms TimerID 2s 定义定时器句柄 static VOID CALLBACK OneMilliSecondProc UINT uTimerID UINT uMsg DWORD PTR dwUser DWORD PTR dw1 DWORD PTR dw2 定义计数器 static int ms 0 CDAQView app CDAQView dwUser 取得系统时间 以 ms 为单位 DWORD osBinaryTime GetTickCount 输出计数器值和当前系统时间 app Timer CDAQView CDAQView TODO add construction code here 给时间间隔变量赋值 wTimerRes 1ms ONE MILLI SECOND wTimerRes 2s TWO SECOND TIMECAPS tc 利用函数 timeGetDevCaps 取出系统分辨率的取值范围 如果无错则继续 if timeGetDevCaps 调用 timeBeginPeriod 函数设置定时器的分辨率 timeBeginPeriod wAccuracy CDAQView CDAQView timeKillEvent TimerID 1ms 删除两个定时器 删除设置的分辨率 timeEndPeriod wAccuracy void CDAQView StartOneMilliSecondTimer if TimerID 1ms timeSetEvent wTimerRes 1ms wAccu

温馨提示

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

评论

0/150

提交评论