每运行到10000秒时,出现意外错误,我在其中使用了DWORD Start=GetTickCount(),DWORD Now=GetTickCount()函数,一旦(Now-Start)>10000时,就出错,奇怪得很!

解决方案 »

  1.   

    long i=0;
    Start=GetTickCount();  //Start,Now 是DWORD类型
    Now=GetTickCount();
    //CString str;
    for(int j=0;j<10000;j++)
    sequence[j]=0;
    while(((Now-Start)/1000)<(TotalTime*60))              //总的运行时间
    {
    double ff=FrequencyArray[i];
    NumOfFreNow=i;
    str="before Motor_zero ";
    file.Write(str,str.GetLength());

    Motor_Zero();
    str="behind Motor_zero ";
    file.Write(str,str.GetLength());
    if(ff>0)
    {
    //str.Format("Frequency=%f",ff);
    //file.Write(str,str.GetLength());
    CWinThread* pChildThread=AfxBeginThread(Respond,&ff,THREAD_PRIORITY_NORMAL, 0,CREATE_SUSPENDED,0);
    pChildThread->ResumeThread();

    result=WaitForSingleObject(pChildThread->m_hThread,INFINITE);
                                //程序大概在这里意外中断的,后面的语句没有执行了
    sequence[i]=1;


    }
    i++;
    i=i%LenOfFrequencyArray;
    if(i==LenOfFrequencyArray) i=0;
    Now=GetTickCount(); 
    }
    程序的大概意思是:在指定的一段时间内(TotalTime,单位:分钟),执行Respond这个线程,我发现:每当(Now-Start)>10000,程序就会出错。加入了一些跟踪语句,发现错误发生在一个Respond正常return之后但是一个新的Respond开始之前。百思不得其解,请大家来帮忙了!
      

  2.   

    如果找不到原因,可以绕开,使用CTimeSpan不就行了。
      

  3.   

    补充:result=WaitForSingleObject(pChildThread->m_hThread,INFINITE);
                                //程序大概在这里意外中断的,后面的语句没有执行了
    我对这个语句作了一些纪录:
         result=WaitForSingleObject(pChildThread->m_hThread,INFINITE);
         if(result==WAIT_OBJECT_0)
         {
          str="WAIT_OBJECT_0";
          file.Write(str,str.GetLength());
          }
    结果,我发现在时间>10000秒之后,前面的Respond是正常结束的,但是却没有发现“WAIT_OBJECT_0”语句的纪录,说明result!=WAIT_OBJECT_0或者别的什么原因,反正错误大概就出在这里了,但是是什么错误以及是什么导致的错误,我还是没有想明白,请大家一起来讨论哦,
      

  4.   

    另外,错误的提示是:
           File:thrdcore.cpp
           Line:113
      

  5.   

    调试一下,看看pChildThread->m_hThread的值是否为空??
      

  6.   

    但是,为什么到了某一个时刻它就工作不正常了呢,前面的每一次的pChildThread的结果都是正确的阿!