• SetTimer在无窗口和有窗口线程的使用 . .


    今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID.
    1. // 111902.cpp : Defines the entry point for the console application.   
    2. //   
    3. //#include "stdafx.h"   
    4. #include "stdio.h"   
    5. #include "windows.h"   
    6. BOOL DispatchThreadMessage(MSG* pMsg);  
    7. VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);  
    8. int main(int argc, char* argv[])  
    9. {  
    10.     printf("Hello World! ");  
    11.     ::SetTimer(NULL,45,1000,OnTimerProc);  
    12.     MSG msg;  
    13.     while (GetMessage(&msg, 0, 0, 0) > 0)  
    14.     {  
    15.         if (msg.hwnd == NULL && DispatchThreadMessage(&msg))  
    16.             continue;  
    17.         TranslateMessage(&msg);  
    18.         DispatchMessage(&msg);  
    19.     }  
    20.     return 0;  
    21. }  
    22.   
    23. BOOL DispatchThreadMessage(MSG* pMsg)  
    24. {  
    25.     if(pMsg->message == 0x0113)  
    26.     {  
    27.         printf("DispatchThreadMessage: %6d ",pMsg->wParam);  
    28.         return false;         
    29.     }  
    30.     return false;  
    31. }   
    32. VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)  
    33. {  
    34.     printf("OnTimerProc: %6d ",idEvent);  
    35. }  

    对应计时器ID的输出的是一个随机数字.

    原来在msdn中

    nIDEvent
    [in] Specifies a nonzero timer identifier. If the hWnd parameter is NULL, and the nIDEvent does not match an existing timer then it is ignored and a new timer ID is generated. If the hWnd parameter is not NULL and the window specified by hWnd already has a timer with the value nIDEvent , then the existing timer is replaced by the new timer. When SetTimer replaces a timer, the timer is reset. Therefore, a message will be sent after the current time-out value elapses, but the previously set time-out value is ignored. If the call is not intended to replace an existing timer, nIDEvent should be 0 if the hWnd is NULL.

    注:只有当hWnd参数为非空时,计时器的ID为设置的 nIDEvent,  否则系统为你自动生成一个计时器ID,可由返回时值获取.
  • 相关阅读:
    log4j日志输出级别(转)
    spring-framework——hao123
    gradle配置国内镜像
    项目启动控制台严重: Error listenerStart问题定位
    Pycharm按键失灵
    Mixed Content混合内容错误 Iframe Http页面无法访问
    RSA加密公钥系数获取结果多00
    xml报文标签替换正则表达式
    AES采用CBC模式128bit加密工具类
    js进行MD5加密(含中文),与后台JAVA加密之后结果不同(解决)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3483129.html
Copyright © 2020-2023  润新知