Windows定视氡器.pptVIP

  • 1
  • 0
  • 约4.3千字
  • 约 11页
  • 2017-11-10 发布于浙江
  • 举报
Windows定视氡器

三、定时器 定时器在接口技术中经常用到。例如: 在串行通信中,每隔一定的时间,查询是否收到数据; 在视频播放中,每隔一定的时间播放一帧图像,等。 在Windows系统下,定时功能的实现,一般不直接操作8253芯片,而是使用系统提供的定时器函数。 Windows系统提供了几种定时器函数,主要为: 系统定时器 (Timer),精度低; 多媒体 定时器 (Multimedia Timer),精度中; 以计数器频率为基准的计数器查询(QueryCounter),精度高。 本节主要讨论多媒体定时器的编程方法。 1、系统定时器 基于8253定时器通道0的55ms定时间隔设计,因此,定时精度为±55ms,且优先级低。编程步骤: (1)建立系统定时器。函数原型为: UINT ::SetTimer(HWND hWnd, //接收时间消息的窗口句柄 UINT nIDEvent, // 本定时器的ID,不能为 0 UINT uElapse, // 时间到达值,毫秒 TIMERPROC lpTimerFunc // 指向消息响应函数); 接收消息的窗口为本程序关联的窗口类,消息响应函数应设置为接收系统消息 WM_TIMER。 注意: 一个应用程序最多只能建立32个定时器。 UINT CWnd::SetTimer(UINT nIDEvent, // 本定时器的ID,不能为0 UINT nElapse // 时间到达值,毫秒 ); (2)建立定时消息响应函数。 void CALLBACK TimerProc ( ? HWND hWnd,????? // 调用SetTimer( )的窗口句柄 UINT uMsg,????? // WM_TIMER ?消息 UINT nIDEvent?? // 定时器?ID DWORD dwTime??? // 系统当前时间 ); 前一种形式,可采用MFC ClassWizard 建立定时消息响应函数OnTimer()。 后一种形式,应编写响应 WM_TIMER 消息的回调函数: 注意:此回调函数为全局函数,不应写在一个类里面。 (3)用毕,删除定时器: BOOL KillTimer( int nIDEvent ); //参数为定时器?ID 2、多媒体定时器 定时精度为±1ms,优先级高。用于对实时性要求较高的场合,如影音播放等。 在应用程序中,多媒体定时器以如下方式运行: 建立多媒体定时器: 建立定时精度 建立定时事件 建立事件触发响应函数 (回调函数) 定时时间到 建立用户自定义消息响应函数; 执行既定的工作 在回调函数中发送消息 删除多媒体定时器: 删除定时事件 删除定时精度 工作完成 (1)在工程中隐式连接系统的多媒体 DLL: 在工程中包含头文件: #include “mmsystem.h” 选 Project /settings,按如下操作设定: 多媒体定时器用DLL形式提供,使用步骤如下: (2) 获得多媒体定时器的最大定时分辨率,函数原型如下: MMRESULT timeGetDevCaps(LPTIMECAPS ptc, //指向 TIMECAPS结构 UINT cbtc //TIMECAPS结构的大小 ); TIMECAPS结构的定义为: typedef struct { UINT wPeriodMin; //定时器的最小分辨率 UINT wPeriodMax; //定时器的最大分辨率 } TIMECAPS; 得到 最大、最小分辨率后,决定你打算采用的分辨率。 注意,你打算采用的分辨率必须在最大、最小分辨率之间。即: wPeriodMin ≤ 你打算采用的分辨率 ≤ wPeriodMax 再为程序设置你的分辨率: MMRESULT timeBeginPeriod( UINT uPeriod ); //参数为你的分辨率 (3)设置“定时时间到”事件的触发方式 MMRESULT timeSetEvent( UINT

文档评论(0)

1亿VIP精品文档

相关文档