按顺序发送A,B,C,D这四条指令,算这件事完成了一遍(只能依次发送ABCD)。现在要完成这件事10遍  线程X,发送A,C。线程Y,发送B,D。但A发送完后,过180秒才能发送B,在这180秒内线程X可以发送A,不能sleep。   UINT CProcess::X_thread(LPVOID p)
  { 
     //线程X发送完指令A后:
     Xdlg->SetTimer(1,180000,NULL); //180s
  }  void CProcess::OnTimer(UINT nIDEvent) 
 {
//向线程Y发送消息
CProcess *p; 
::PostMessage((HWND)p, TIMEOUT, 0, 0);  //参数1对吗?
 }  UINT CProcess::Y_thread(LPVOID p)  //机械手的运动的线程
 {
      MSG msg;  //线程的消息
  if(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
  switch(msg.message)
  {
    case  TIMEOUT:
   TimeOut=TRUE;
   break;      
    default: break;
  }
  }
     
              if(TimeOut==TRUE )  
              //发送消息B  }
  
  1 这段代码,实现了上述功能吗?
  
  2 OnTimer(UINT nIDEvent) 函数应该写什么代码?
  
  3  KillTimer(1);这句代码应该写在那个函数里?  4  有什么函数的功能是:从这点计时,过180秒,通知时间到?

解决方案 »

  1.   

    //参数1对吗?
    不对
    CProcess *p;线程和句柄没关系啊
    逻辑和使用都有问题1。这段代码,实现了上述功能吗?
    没有实现,代码写错了,另外你用了SetTimer的中断技术,不用多线程也能达到效果的2. OnTimer(UINT nIDEvent) 函数应该写什么代码?
    这里的nIDEvent就是你SetTimer的第一个参数,也就是说
    如果你SetTimer(1,180000,NULL); 
    你在OnTimer(UINT nIDEvent)
    {
        if(1==nIDEvent)
         {
           就会进来    因此可以说不用多线程也能达到目的
            进来以后就可以KillTimer(1)了
        }
    }
    3.参考2有解释
    4.SetTimer就是你要的这个功能
      

  2.   

    另外开个线程,线程直接sleep(时间),执行即可。
      

  3.   

    OnTimer()你一可以把它当作一个线程。其他问题不多说,问题4。
    循环+Sleep(毫秒);
    (S大写)
      

  4.   

    注意,Timer不等于线程,它们的功能根本不一样。
      

  5.   


    只是实现原理不同,实现同样的效果,不同的方式而已,何必计较。现在计算机效率那么高,多开线程没问题的。如果消息处理有问题或是什么问题,导致处理不到WM_TIMER多麻烦,还不如用线程可靠。
      

  6.   

    void TimeCount(int iElapsed)
    {
    DWORD timeStart,timeStop=0;
    timeStart = GetTickCount();
    while((timeStop - timeStat) != iElapsed*1000)
    {
    timeStop = GetTickTime();
    }
    PostMessage(XXX);
    }
      

  7.   


      不能用sleep,还有其它的方法吗?
      

  8.   

    有什么函数的功能是:从这点计时,过180秒,通知时间到?
    ================
    CreateWaitableTimer -》SetWaitableTimer -》WaitForSingleObject
      

  9.   


      to agoago_2009:  你能给出大概的例子或一段code吗?谢谢
      

  10.   


     to agoago_2009:
     用"CreateWaitableTimer -》SetWaitableTimer -》WaitForSingleObject"这个办法,  在这180秒,一直等待信号,F5禁止
     
      可我需要在这180秒,发前面的指令,我需要重复做这件事,  有没有什么办法?
      

  11.   

       在线程中使用SetTimer,这个线程是对话框关联类的静态成员函数,   SetTimer返回了1,应该是创建成功了,但调试不进入OnTimer函数   这种情况是不是要用回调函数?