本帖最后由 chenquangobeijing 于 2012-09-11 22:38:09 编辑

解决方案 »

  1.   


     to xu561865:
     可是Manipulator_Move_thread这个线程没执行完,只执行了一部分语句。
      

  2.   

    因为线程的执行你是无法预计的(除非使用了线程同步的方法),所以这里有问题:
                if(isDS==TRUE && isDR1==FALSE)  //第3个执行
                {                        
                    Sleep(10);
                    isDR1=TRUE;  
                    SetEvent(Xdlg->M_Event);                                          
                  }          //执行完上一句之后,可能会继续执行下一句,if语句为假,红色部分全都不执行              if(isDR2==FALSE && isMT2==TRUE)  //第5个执行,断点在这点不执行,应该去第4个执行处的
                 {
                     DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE);
                     if(dw6==WAIT_OBJECT_0)  
                     {                         
                         Sleep(10);
                         isDR2=TRUE;  
                         SetEvent(Xdlg->M_Event);                  
                      }
                   }
                 if(isDS==TRUE && isDR1==TRUE  && isDR2==TRUE)  ++i;      }
      

  3.   


     to agoago_2009:
     
     我没看懂,不知道到底怎么改?方便留下你的QQ号吗?
     
      

  4.   

    最简单的就是,把if前加while循环:
    while(1)
    {
     if(isDR2==FALSE && isMT2==TRUE) //第5个执行,断点在这点不执行,应该去第4个执行处的
    {
    DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE);
    if(dw6==WAIT_OBJECT_0) 

    Sleep(10);
    isDR2=TRUE; 
    SetEvent(Xdlg->M_Event); 
    break;
    }}
      if(isDS==TRUE && isDR1==TRUE && isDR2==TRUE) ++i;  }