Windows编程:计时器消息的处理、销毁计时器

来源:互联网 发布:mac好玩的游戏推荐 编辑:程序博客网 时间:2024/06/07 21:40

计时器消息的处理


      (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 消息。
原创粉丝点击