我创建了一个计时器每2秒激活一次,但是在OnTimer()函数中用了Sleep(5000)函数;那么请问OnTimer()是2秒还是7秒执行一次,谢谢!

解决方案 »

  1.   

    Sleep在执行完成之前不会接收到WM_TIMER消息
      

  2.   

    因为消息然会发送消息到消息队列,所以sleep5秒后就马上处理WM_TIMER,所以是5秒,但消息队列的消息会越积越多的
      

  3.   

    是5秒,但是消息队列的Timer消息不会越积越多,因为Timer消息不积累。
      

  4.   

    WM_TIMER消息是不会越积越多的
      

  5.   

    5秒一到就执行,消息队列中已经有了WM_TIMER消息
      

  6.   

    大约5秒, WM_TIMER和 WM_PAINT一样,系统会自动合并消息的
      

  7.   

    这个问题,调试一下好了,每次WM_TIMER就把当前时间写到一个文件里看看
      

  8.   

    5 秒
    //以下是我的一个程序稍做修改而成的例子
    //m_edit edit控件变量
    void CDlgDlg::OnButton3() 
    {
    SetTimer(1,2000,NULL);
    }void CDlgDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    Sleep(5000);
    CString str;
    CString strYear, strMonth, strDay;
    CString strHour, strMinute, strSecond;
    CTime myTime;
    int myYear, myMonth, myDay;
    int myHour, myMinute, mySecond;

    myTime = myTime.GetCurrentTime();
    myYear = myTime.GetYear();
    myMonth = myTime.GetMonth();
    myDay = myTime.GetDay();
    myHour = myTime.GetHour();
    myMinute = myTime.GetMinute();
    mySecond = myTime.GetSecond();

    strYear.Format(" %d", myYear);
    if (myMonth < 10) 
    {
    strMonth.Format("-0%d", myMonth);
    }
    else
    {
    strMonth.Format("-%d", myMonth);
    }

    if (myDay < 10)
    {
    strDay.Format("-0%d", myDay);
    }
    else
    {
    strDay.Format("-%d", myDay);
    }

    strHour.Format(" %d", myHour);
    if (myMinute < 10)
    {
    strMinute.Format(":0%d", myMinute);
    }
    else
    {
    strMinute.Format(":%d", myMinute);
    }

    if (mySecond < 10) 
    {
    strSecond.Format(":0%d", mySecond);
    }
    else
    {
    strSecond.Format(":%d", mySecond);
    }

    str = "//Added by " ;
    str = str + strYear + strMonth + strDay + strHour + strMinute + strSecond;
    UpdateData(FALSE);

    m_edit.SetWindowText(str);
    m_edit.SetSel(0, str.GetLength());
    m_edit.Copy();

    }