小弟在一程序中同时使用定时器1和2:
  SetTimer(1,1000,NULL);
  SetTimer(2,100,NULL);
  编译能通过,但运行不正常,请问各位大侠是不是两个定时器同时使用的原因??有什么办法能同时使用??
  谢谢!

解决方案 »

  1.   

    你的timer函数是怎么写的得贴出来。
      

  2.   


    在相应函数中就直接判断的void CControlDlg::OnTimer(UINT nIDEvent) 
    {
        if(nIDEvent==1)  
                {
                 .....
                }
                
        if(nIDEvent==2)  
                {
                 .....
                }
    }
      

  3.   

    SDK的方式是这样用的:SetTimer(hwnd,             // handle to main window 
        IDT_TIMER1,            // timer identifier 
        10000,                 // 10-second interval 
        (TIMERPROC) NULL);     // no timer callback 
     
    SetTimer(hwnd,             // handle to main window 
        IDT_TIMER2,            // timer identifier 
        300000,                // 5-minute interval 
        (TIMERPROC) NULL);     // no timer callback case WM_TIMER: 
     
        switch (wParam) 
        { 
            case IDT_TIMER1: 
                // Process the 10-second timer. 
     
                 return 0; 
     
            case IDT_TIMER2: 
                // Process the 5-minute timer.             return 0; 
        } 
    按理说你这也没错
      

  4.   

    没有问题的,多个定时器可以安全的共用,但是还要注意在程序中是否有其它问题,可以传CODE来看看
      

  5.   

     if(nIDEvent==1)   
     {
      ..
     }
     else  if(nIDEvent==2)
     {
       ..
     }
      

  6.   

    使用多个定时器应该不会有问题的,可能是你的处理WM_TIMER消息的响应函数中有问题,
    void CClassNameDlg::OnTimer(UINT nIDEvent)  

       switch(nIDEvent)
       {
       case 1:
           ...
           break;
       case 2:
           ...
           break;
       }  
       CDialog::OnTimer(nIDEvent)
      

  7.   

     但是定时器1定时1s,定时器2定时0.1s,这样的话定时器2运行10次后基本与定时器1同时触发,OnTimer(UINT nIDEvent)应该安哪个执行呢??  
      

  8.   

    两个timer同时触发的时候,应该是由系统来调用两次timer吧,同时触发也不是问题。
      

  9.   

    Timer是一个消息,所以永远不可能两个Timer同时触发。就算是理论上的同时,在经过windows处理后,也会有先后,这是由内核保证的。
      

  10.   

    楼主需要确保nIDEvent确实就是1和2,OnTimer的nIDEvent是同SetTimer的返回值保持一致的。
    另外,楼主,当你把调试断点设置在OnTimer里面的时候,其实Timer线程是不会停止的,结果就是之后Timer线程并不是按你设定的时间到达的。
      

  11.   

    Timer消息会放入线程的消息队列