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


    今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID.

    // 111902.cpp : Defines the entry point for the console application.  
    //  
    //#include "stdafx.h"  
    #include "stdio.h"  
    #include "windows.h"  
    BOOL DispatchThreadMessage(MSG* pMsg);  
    VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);  
    int main(int argc, char* argv[])  
    {  
        printf("Hello World!
    ");  
        ::SetTimer(NULL,45,1000,OnTimerProc);  
        MSG msg;  
        while (GetMessage(&msg, 0, 0, 0) > 0)  
        {  
            if (msg.hwnd == NULL && DispatchThreadMessage(&msg))  
                continue;  
            TranslateMessage(&msg);  
            DispatchMessage(&msg);  
        }  
        return 0;  
    }  
      
    BOOL DispatchThreadMessage(MSG* pMsg)  
    {  
        if(pMsg->message == 0x0113)  
        {  
            printf("DispatchThreadMessage: %6d
    ",pMsg->wParam);  
            return false;         
        }  
        return false;  
    }   
    VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)  
    {  
        printf("OnTimerProc: %6d
    ",idEvent);  
    }  

    对应计时器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,可由返回时值获取.
    参考:http://blog.csdn.net/chenyujing1234/article/details/7668642
  • 相关阅读:
    spring mvc文件上传,request对象转换异常
    解决国内android sdk无法更新,google不能的简单办法
    1.5 高速找出机器故障
    图的深度优先搜索与广度优先搜索
    我对ThreadLocal的理解
    Leetcode--3Sum
    <转>Openstack Ceilometer监控项扩展
    怎样利用WordPress创建自己定义注冊表单插件
    java_免费视频课程汇总
    HDU 3641 Pseudoprime numbers(快速幂)
  • 原文地址:https://www.cnblogs.com/findumars/p/4847331.html
Copyright © 2020-2023  润新知