逐梦旅程:Windows游戏编程之从零开始6.1.3 删除定时器_逐梦旅程:Windows游戏编程之从零开始6.1.3 删除定时器试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 逐梦旅程:Windows游戏编程之从零开始 > 6.1.3 删除定时器

逐梦旅程:Windows游戏编程之从零开始——6.1.3 删除定时器

6.1.3 删除定时器 定时器建立后,就会一直自动地按照定义设定的时间间隔来发出WM_TIMER消息,如果要停用某个定时器,必须调用专门用于删除定时器的API函数——KillTimer。KillTimer,人如其名,为“杀死”(Kill)定时器(Timer)而生。我们可以在MSDN中查到这个函数的定义如下: 1. BOOL WINAPI KillTimer( 2. _In_opt_ HWND hWnd, 3. _In_ UINT_PTR uIDEvent //定时器代号 4. ); ■ 第一个参数,HWND类型的hWnd,我们的老朋友窗口句柄。 ■ 第二个参数,UINT_PTR类型的uIDEvent,我们想要删除的定时器的代号。 进阶理解——定时器消息不是异步的~! 因为定时器使用硬件定时器中断,有时会让人产生误解,认为程序会异步地被中断来处理WM_TIMER消息。然而,WM_TIMER消息并不是异步的。WM_TIMER消息放在正常的消息队列之中,和其他消息排列在一起,因此,如果在SetTimer呼叫中指定间隔为1000毫秒,那么不能保证程序每1000毫秒或者989毫秒就会收到一个WM_TIMER消息。如果其他程序的执行事件超过一秒,在此期间内,我们的程序将收不到任何WM_TIMER消息。 事实上,Windows对WM_TIMER消息的处理非常类似于对WM_PAINT消息的处理,这两个消息都是低优先级的,程序只有在消息队列中没有其他消息时才接收它们。 WM_TIMER还在另一方面和WM_PAINT相似:Windows不能持续向消息队列中放入多个WM_TIMER消息,而是将多余的WM_TIMER消息组合成一个消息。因此,应用程序不会一次收到多个这样的消息,尽管可能在短时间内得到两个WM_TIMER消息。应用程序不能确定这种处理方式所导致的WM_TIMER消息遗漏的数目。 这样,WM_TIMER消息仅仅在需要更新时才提示程序,程序本身不能经由统计WM_TIMER消息的数目来计时。 好了,使用定时器的三步曲的基础知识我们就介绍完了,下面依旧是看一个示例程序,在示例程序中把本节知识融会贯通。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《逐梦旅程:Windows游戏编程之从零开始》其他试读目录

• 6.1 定时器动画显示
• 6.1.2 WM_TIMER消息响应
• 6.1.3 删除定时器 [当前]
• 6.1.4 示例程序GDIdemo6
• 6.2 游戏循环动画显示
• 6.3 透明动画
• 6.4 排序贴图
• 6.5 章节小憩
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •