Windows编程:计时器消息的处理、销毁计时器
2017-06-08 19:23
337 查看
计时器消息的处理
(1)当不使用回调函数时
当不使用回调函数时程序会收到 WM_TIMER 消息, 这时只要像处理普通消息一样处理 WM_TIMER 消息就行了, 如果有多个计时器, 可以从 wParam 参数中根据计时器的ID作不同的处理, 例如:
(2)使用回调函数的计时器
当计时器创建时指定好回调函数时, 回调函数可以像下面的写法进行:
当不同的计时器使用同一个回调函数时, 可以根据回调函数的 iTimerID 参数来区分不同的计时器
例如:
销毁计时器
在开始部分也已经说了, Windows的计时器属于系统资源, 在使用完毕后应及时销毁。销毁计时器的函数是 KillTimer, 他的函数原型如下:
要销毁一个计时器, 必须知道该计时器的ID, 所以保留计时器的ID也是十分重要的, 你可以在任何时候销毁一个已经创建的计时器, 包括在处理计时器消息时。 最好在程序退出之前销毁完所有的已创建的计时器, 一个不错的办法是在处理 WM_DESTROY 消息时对于那些没有销毁的全部进行销毁。
需要注意的是, 当成功销毁一个计时器后, 该计时器所产生的 WM_TIMER 消息并不会从消息队列中移除, 如果消息队列中还有没有处理的 WM_TIMER 消息, 那么即使销毁了该计时器, 应用程序还是会有可能处理到没有处理完的 WM_TIMER 消息。
(1)当不使用回调函数时
当不使用回调函数时程序会收到 WM_TIMER 消息, 这时只要像处理普通消息一样处理 WM_TIMER 消息就行了, 如果有多个计时器, 可以从 wParam 参数中根据计时器的ID作不同的处理, 例如:
case WM_TIMER: switch(wParam) { case 1: [处理ID为1的计时器] break; case 2: [处理ID为2的计时器] break ; ... } return 0 ;
(2)使用回调函数的计时器
当计时器创建时指定好回调函数时, 回调函数可以像下面的写法进行:
VOID CALLBACK TimerProc( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime ) { [处理 WM_TIMER 消息] }
当不同的计时器使用同一个回调函数时, 可以根据回调函数的 iTimerID 参数来区分不同的计时器
例如:
switch(iTimerID) { case 1: //处理ID为1的定时器 [...] break; case 2: //处理ID为2的定时器 [...] break; ... }
销毁计时器
在开始部分也已经说了, Windows的计时器属于系统资源, 在使用完毕后应及时销毁。销毁计时器的函数是 KillTimer, 他的函数原型如下:
BOOL KillTimer( HWND hWnd, //窗口句柄 UINT_PTR uIDEvent //计时器ID );
要销毁一个计时器, 必须知道该计时器的ID, 所以保留计时器的ID也是十分重要的, 你可以在任何时候销毁一个已经创建的计时器, 包括在处理计时器消息时。 最好在程序退出之前销毁完所有的已创建的计时器, 一个不错的办法是在处理 WM_DESTROY 消息时对于那些没有销毁的全部进行销毁。
需要注意的是, 当成功销毁一个计时器后, 该计时器所产生的 WM_TIMER 消息并不会从消息队列中移除, 如果消息队列中还有没有处理的 WM_TIMER 消息, 那么即使销毁了该计时器, 应用程序还是会有可能处理到没有处理完的 WM_TIMER 消息。
相关文章推荐
- 走进windows编程的世界-----消息处理函数(2)
- 走进windows编程的世界-----消息处理函数(2)
- windows编程,vc,mfc消息处理
- 走进windows编程的世界-----消息处理函数(4)
- 走进windows编程的世界-----消息处理函数(3)
- 走进windows编程的世界-----消息处理函数(1)
- windows基础编程----第三篇(窗口的消息处理机制)
- 关于Windows系统下编程之字符处理
- NPP 示例:演示 Windows 消息处理 API (MAPI) http://msdn2.microsoft.com/zh-cn/library/ms177535(VS.80).aspx
- windows程序与vc消息处理入门概念
- windows平台消息处理函数(C版)
- 深入剖析MFC中Windows消息处理、运行机制
- C#开发WINDOWS应用程序时消息的处理
- C#开发WINDOWS应用程序时消息的处理
- Windows编程参考--消息
- Windows 系统编程初探 (五)结构化异常处理之二:线程相关异常处理
- 数字图像处理编程入门—第1章 Windows位图和调色板
- 如何使对话框中接收到WM_CHAR消息(Windows编程)
- Windows 系统编程初探 (四)结构化异常处理之一:SEH的基本原理与进程相关异常处理
- TfxSleep,一个可以在等待超时期间处理Windows消息的函数,防止卡死