VC高精度多媒体定时器的使用.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC高精度多媒体定时器的使用

虽然 Win95 下可视化开发工具如 VC 、Delphi 、C ++ Builder 等都有专用的定时器控件 Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为 55ms,且定时器 消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下 的应用。不过Microsoft 公司在 Win32 API 函数库中已经为用户提供了一组用于高精度计 时的底层函数,如果用户使用得当,计时精度可到 1ms。这个计时精度、对于一般的实时系 统控制完全可以满足要求。现将由 C ++ Builder 4.0 提供的重新封装后的一组与时间相 关的主要接口函数(函数名、参数、功能与 Win32 API 基本相同)说明如下: 1 .DWORD timeGetTime(void) 返回从 Windows 启动开始经过的毫秒数。最大值为 232 ,约49.71 天。 2 .MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent) 该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一 旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回 NULL 。参数 说明如下: uDelay :以毫秒指定事件的周期。 UResolution :以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为 1ms。 LpTimeProc :指向一个回调函数。 DwUser :存放用户提供的回调数据。 FuEvent :指定定时器事件类型: TIME_ONESHOT :uDelay 毫秒后只产生一次事件 TIME_PERIODIC :每隔uDelay 毫秒周期性地产生事件。 3 .MMRESULT timeKillEvent(UINT uTimerID) 该函数取消一个指定的定时器回调事件。uTimerID 标识要取消的事件(由 timeSetEvent 函数返回的标识符)。如果成功则返回 TIMERR_NOERROR,如果定时器时间不存在则返回 MMSYSERR_INVALPARAM 。 4 .回调函数 void CALLBACK TimeProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); 该函数是一个应用程序定义的回调函数,出现定时器事件时该函数被调用。TimeProc 是应用程序定义的函数名的占位符。使用该函数 时 要 注 意 的 是 , 它 只 能 调 用 以 下 有 限 的 几 组 API 函 数 : PostMessage , timeGetSystemTime , timeGetTime , timeSetEvent ,timeKillEvent ,midiOutShortMsg, midiOutLongMsg ,OutputDebugString 。同时也不要使用完成时间很 长的 API 函数,程序尽可能简短。 使用以上一组函数就可以完成毫秒级精度的计时和控制(在 C++Builder 中使用时要将 头文件 mmsystem.h 加到程序中)。由于将定时控 制精确到几毫秒,定时器事件将占用大量的 CPU 时间和系统资源,所以在满足控制要求 的前提下,应尽量将参数uResolution 的数值增大。而 且定时器实时控制功能完成后要尽快释放。 注意以下几点问题: 一、回调函数的参数不能有误,否则可能引起程序崩掉; 二、事件调用周期 uDelay 不能小于事件处理时间,否则会引起程序崩溃; 三、通过 dwUser 给回调函数传递参数 例程如下: 1 MMRESULT g_wTimerID = 0; // 回调函数,参数不能有错 2 void CALLBACK CDsisiiDlg::SendFun(

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档