我建了一个基于对话框的Project,用SetTimer函数设置定时器,用OnTimer函数来响应,但是现在我想做两个定时器,一个是5ms,一个是5min,如何分别设置和响应呢?

解决方案 »

  1.   

    SetTimer的第一个参数是一个ID,对应不同的定时器,ID设置成不一样,然后在CDialog::OnTimer中依据不同的ID判断,例如:设置Timer的地方:#define ID_TIMER1  100
    #define ID_TIMER2  200
    SetTimer( ID_TIMER1 , 5 , NULL );
    SetTimer( ID_TIMER2 , 5*60*1000 , NULL );在void CXXXDlg::OnTimer(UINT nIDEvent) 中:
    if( nIDEvent == ID_TIMER1 )
    {
       // 这是ID_TIMER1触发对应的处理
    }
    else if( nIDEvent == ID_TIMER2 )
    {
       // 这是ID_TIMER2触发对应的处理}CDialog::OnTimer(nIDEvent);
      

  2.   

    SetTimer(1, 5, NULL)
    SetTimer(2, 300000, NULL)OnTimer(UINT nIDEvent)
    {
      switch(nIDEvent)
     {
      case 1:
         ... //Your code here
      case 2:
         ... //Your code here
      }}
      

  3.   

    OnTimer的精度据说最少也就是47ms
      

  4.   

    void CMyDlg::OnTimer(UINT nIDEvent)
    {
    if(nIDEvent==ID_CLOCK1)
        .....
    if(nIDEvent==ID_CLOCK1)
        .....
    }
    SetTimer(ID_CLOCK1,5,NULL);        //5 ms
    SetTimer(ID_CLOCK2,300000,NULL;   //5 min
      

  5.   

    to bluebohe:  "OnTimer的精度据说最少也就是47ms"  是什么意思啊?
      

  6.   

    SetTimer(1,5,NULL);
    SetTimer(2,300000,NULL);OnTimer(...)
    {
    if (nIDEvent==1)
    ...
    else if(nIDEvent==2)
    ...
    }
      

  7.   

    "OnTimer的精度据说最少也就是47ms"这句话不尽正确。
    在以前,Timer的精确度依据于软件产生的时钟中断,每秒18.2次,精度约为55ms但现在情况已有所不同,我在Windows 2000下测试了一下,Timer的精度可以达到10ms如果楼主要使用更高精确度的Timer,那么就要使用多媒体时钟了
      

  8.   

    如不想麻烦可在OnTimer()中设置多个STATIC INT变量通过变量的数值判断执行的函数.
    如:
    {
       static long tt=0,ts=0,te=0;
       tt++;
       ts++;
       te++;
       if(tt>2)
       {
           tt=0;
           aaaa();
        }
       if(ts>10)
        {
           ts=0; 
           bbb();
         }
        if(te>30)
        {
           te=0;
           ccc();
         }
    }