如何用在程序里用的出错?
谢谢

解决方案 »

  1.   

    如何用在程序里用的出错?
    ?在线程里Sleep(n)不就可以了
      

  2.   

    我是指像在主程序里那样用出错!说参数不正确!
    我要用timer来实现检查数据是否完全
      

  3.   

    如果不用MFC,在DLL中使用定时器就必须用API的定时器.
    它的原形是这样的:
    UNIT SetTimer(HWND hWnd,UINT uTimerID,UINT,uInterval, TIMERPROC fnTimerProc)
    看看你自己调用时的参数如何?
      

  4.   

    DWORD WINAPI  CEmapDlg::Tree_time (LPVOID lpParameter)
    {MSG msg;HTREEITEM warnitem;
    int ty;
     CQuneuew Qunenew;
      CTreeCtrl *ctrl=(CTreeCtrl*)lpParameter;
      
      BOOL tab=0;
        ::SetTimer(NULL,1,700,NULL);
         while (GetMessage(&msg, NULL, 0, 0)) 
     { 
               if(msg.message==WM_TIMER) 
       {
       ////////////
       
      
     if(tab==TRUE) 
     {
     
     tab=FALSE;
     if(Qunenew.findFristitem()==FALSE) continue ;
     while (Qunenew.FindNextitem(warnitem,ty))
     {
     ctrl->SetItemImage(warnitem ,2,2);
     }  }
     else
     {
     tab=TRUE;
     if(Qunenew.findFristitem()==FALSE) continue ;  while (Qunenew.FindNextitem(warnitem,ty))
     {
     if(ty==0)
     ctrl->SetItemImage(warnitem,1,1);
     else
     ctrl->SetItemImage(warnitem,0,0);  }  }              
       
       ////////////////       

       }
       if(msg.message ==2005)
       {
      Qunenew.Insert((HTREEITEM)msg.wParam ,(int)msg.lParam );
       }
        
       if(msg.message ==2006)
       {
      Qunenew.Delete((HTREEITEM)msg.wParam);
      if((int)msg.lParam ==0)
      {
       ctrl->SetItemImage((HTREEITEM)msg.wParam,1,1);

      }
      else
      {
      ctrl->SetItemImage((HTREEITEM)msg.wParam,0,0);
      }    }
     

     }
     ::KillTimer(NULL,1); return 0;
    }
      

  5.   

    在线程里不能随便使用Sleep,可以GetTickCount和while循环来模拟Timer
      

  6.   

    Timer是基于消息的,线程里连窗口都没有,怎么用Timer?
    用Event和Sleep来处理线程的定时。
      

  7.   

    不是吧,Timer的消息处理可以在线程消息队列中处理呀!晕
      

  8.   

    就是,楼主没说清在线程里用timer具体干啥:
    1,如果只是为了等待几秒钟,用Sleep完全可以,用GetTickCount和while循环是极不好的,那样就成了候先生所谓的“Busy Loop”了,CPU别的事就别干了。
    2,如果你是想开一个子线程,定时检查一些东西(估计楼主是这意思),那么应该开启一个UI线程,UI线程里注册一个新窗口,然后就可以等着接收消息了,比如你想要的Timer消息。这是最正统的方法,较容易实现,找本多线程书随便看看就可以编程了。
      

  9.   

    线程里用Timer可以,但没必要,用多了也不好
      

  10.   

    线程里用TIMER,比较新鲜,学习一下,
    我以前都是在进程里用TIMER,然后用同步技术转给线程,直接的没用过,
    用GetTickCount和while循环是非常非常糟糕的,会造成CPU占用率居高不下的。
      

  11.   

    在线程的InitInstance()中:
          m_nTimerID = ::SetTimer(NULL, 0, 3000,TimerProc); 
    在定义函数:
          static VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, 
             UINT uIDEvent, DWORD dwTime);
    在函数中: CConnectThread *pThread = (CConnectThread *)AfxGetThread();
    if (uIDEvent == pThread->m_nTimerID)
    {
    ·····
    }
      

  12.   

    DWORD WINAPI  threads (LPVOID lpParameter)
    {MSG msg;
        ::SetTimer(NULL,1,700,NULL);
         while (GetMessage(&msg, NULL, 0, 0)) 
     { 
               if(msg.message==WM_TIMER) 
       { //insert your code     }
     }
     ::KillTimer(NULL,1); return 0;
    }
    用CreateThread()启动线程就可以了