我在一动态创建的线程中要设一个定时器SetTimer(2.1000,NULL)之前主线程中已经使用了一个定时器,我该怎么实现这个动态创建的定时器的响应事件呢?

解决方案 »

  1.   

    在OnTimer消息函数中,参数对应的是定时器的ID,值是2的就是这个。
      

  2.   

    同意楼上
    SetTimer(2,1000,NULL)的第一个参数2就是定时器的ID
    在OnTimer中:
    OnTimer(UINT nIDEvent)
    {
        if(nIDEvent == 1)
            blabla...  //定时器1的行为
        if(nIDEvent == 2)
            blabla...  //定时器2的行为
    }
      

  3.   

    新线程里的定时器响应函数,可以单独写,按照MSDN上提供的格式就行了。
      

  4.   

    OnTimer 
    CXXXXDlg:OnTimer(UINT   nIDEvent) 

         switch(nIDEvent)
         {
          case 1:              //定时器1
                .........
          break;
          case 2:             //定时器2
               . ........
          ...............
          default:
               break;
         }
    }或者是在线程里,
    BOOL temp=FALSE;
    void ThreadFunc()
    {
       temp=TRUE;
       while(temp)
       {
           ............
           ...................
           Sleep(1000);         //间隔一秒
        }
    }
      

  5.   

    BOOL   temp=FALSE;定义成全局变量,或类的静态成员变量
      

  6.   

    UINT InfoDlg::OnShowWindow()
    {  
        ......
        pThread2=AfxBeginThread(ReadFileName,0,THREAD_PRIORITY_NORMAL);
        ......
    }UINT ReadFileName(LPVOID pParam)
    {   
        SetTimer(m_dlg->m_hWnd,2,500,NULL);
    ......
    }
    void InfoDlg::OnTimer(UINT nIDEvent)
    {
       switch(nIDEvent) 
       case 2:
      {
    CStringArray filename;
    EnterCriticalSection(&criCounter);
    filename.GetAt(0)=m_ArrayName.GetAt(count);
    LeaveCriticalSection(&criCounter);
    if (filename.GetAt(0)!=filename.GetAt(1))
    filename.GetAt(1)=filename.GetAt(0);
    ::SetDlgItemText(m_dlg->m_hWnd,IDC_STATIC4,filename.GetAt(1));
     }  
        break ;
    }
    可能我说的不太明白,代码贴这里,是线程中开一个定时器,去实现读数据这个事件
    因为这个线程是事件触发的,但是现在ontimer不响应,编译没问题,运行不下去。
      

  7.   

    你既然都开线程了还用定时器干啥
    在线程中直接
    while(true)
    {
        sleep(1000);  //歇1秒循环一次
    }