debug高手请进来看看,帮我分析一下错误原因,谢谢!在线等!!!

maomao2332 2003-12-16 02:35:46
错误提示:File:thrdcore.cpp
Line:113
我把这个thrdcore.cpp的内容放在下面,请问这个提示说明我的程序什么地方有错误!?
// wait for thread to be resumed
VERIFY(::WaitForSingleObject(hEvent2, INFINITE) == WAIT_OBJECT_0);
::CloseHandle(hEvent2);

// first -- check for simple worker thread
DWORD nResult = 0;
if (pThread->m_pfnThreadProc != NULL)
{
nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams);
ASSERT_VALID(pThread);<----------错误指向这里
}
// else -- check for thread with message loop
else if (!pThread->InitInstance())
{
ASSERT_VALID(pThread);
nResult = pThread->ExitInstance();
}
else
{
// will stop after PostQuitMessage called
ASSERT_VALID(pThread);
nResult = pThread->Run();
}
...全文
71 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
maomao2332 2003-12-16
  • 打赏
  • 举报
回复
UINT Respond(LPVOID pParam)
{
char temp[40];
long k;
double step=0.5;
double daFreq=*(double*)pParam;
DWORD sum=0;
//CWinThread* ResThread;

RespondStart=1;
//sprintf(temp,"daFreq=%2.1f",daFreq);
//MessageBox(NULL,temp,"",MB_OK);
//float da_Mag1=0.1;
if(sequence[NumOfFreNow]!=0)
{
CWinThread* ResThread=AfxBeginThread(GetRespond,&daFreq,THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED,0);
ResThread->m_bAutoDelete=FALSE;
ResThread->ResumeThread();
WaitForSingleObject(ResThread->m_hThread,INFINITE);
DWORD dwExitCode;
::GetExitCodeThread(ResThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
Sleep(1000);

}
else
delete ResThread;

k=respond;
if(fabs(k-ini)>1)
{
if(k>ini)
da_Mag[NumOfFreNow]-=0.01;
else
da_Mag[NumOfFreNow]+=0.01;
}

}
else
{
//Start=GetTickCount();
again:
da_Mag[NumOfFreNow]=0.1;
//CWinThread* ResThread=AfxBeginThread(GetRespond(daFreq,da_Mag);
CWinThread* ResThread=AfxBeginThread(GetRespond,&daFreq,THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED,0);
ResThread->m_bAutoDelete=FALSE;
ResThread->ResumeThread();
WaitForSingleObject(ResThread->m_hThread,INFINITE);
DWORD dwExitCode;
::GetExitCodeThread(ResThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
Sleep(1000);

}
else
delete ResThread;
k=respond;
if(k>ini)
{
/*
file.SeekToEnd();
sprintf(temp,"da_Mag now=%2.1f",da_Mag);
file.Write(temp,lstrlen(temp));
file.SeekToEnd();
sprintf(temp,"respond now=%d",k);
file.Write(temp,lstrlen(temp));
*/
//
sum++;
if(sum<=2) goto again;
else
{
AfxMessageBox("测量的最小应变大于给定的应变值");
sum=0;
return 0;
}
}
else
{
int n_step=1;
while(fabs(k-ini)>n_step)
{
while(k<ini-n_step)
{
da_Mag[NumOfFreNow]+=step;
if(da_Mag[NumOfFreNow]>MaxBattery)
{
AfxMessageBox("给的应变太大了");
return 0;
}
//k=GetRespond(daFreq,da_Mag);
CWinThread* ResThread=AfxBeginThread(GetRespond,&daFreq,THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED,0);
ResThread->m_bAutoDelete=FALSE;
ResThread->ResumeThread();
WaitForSingleObject(ResThread->m_hThread,INFINITE);
DWORD dwExitCode;
::GetExitCodeThread(ResThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
Sleep(1000);
}
else delete ResThread;
k=respond;
}
step=step/2.0;
while(k>ini+n_step)
{
da_Mag[NumOfFreNow]-=step;
//k=GetRespond(daFreq,da_Mag);
CWinThread* ResThread=AfxBeginThread(GetRespond,&daFreq,THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED,0);
ResThread->m_bAutoDelete=FALSE;
ResThread->ResumeThread();
WaitForSingleObject(ResThread->m_hThread,INFINITE);
DWORD dwExitCode;
::GetExitCodeThread(ResThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
Sleep(1000);

}
else delete ResThread;
k=respond;
step/=2.0;
}
}
}
}

//if(sequence!=0)
//{
//sprintf(temp,"da_Mag=%2.1f",da_Mag);
//MessageBox(NULL,temp,"",MB_OK);
//Start=GetTickCount();
//k=GetRespond(daFreq,da_Mag);

//}

/*
k2=GetRespond(daFreq,da_Mag2);
if(k2<ini)
{
file.SeekToEnd();
sprintf(temp,"respond now=%d",k2);
file.Write(temp,lstrlen(temp));
MessageBox(NULL,"the max smaller than the ini","Attention!",MB_OK);

return 0;
}

da_Mag=(da_Mag1+da_Mag2)/2;
L:
k=GetRespond(daFreq,da_Mag);
while(fabs(k-ini)>1)
{
if(k>ini)
da_Mag2=da_Mag;
else
da_Mag1=da_Mag;
da_Mag=(da_Mag1+da_Mag2)/2;
k=GetRespond(daFreq,da_Mag);
}
*/
FreqencyValue=daFreq;
DWORD sumTime=0;
Fulia();

Now=GetTickCount();
sumTime=(Now-Start)/1000;
if(ForceTemperatureFlag)
{
file.SeekToEnd();
//sprintf(temp,"Temperature now=%4.1f\r\n",(float)PV/10.0);
if(Value>0)
{
sprintf(temp,"%ld\t%d\t%2.5f\t%4.1f\t%3.5f\t%2.5f\r\n",sumTime,
k,daFreq,PV/10.0,ValueM,Value);
file.Write(temp,lstrlen(temp));
}
//Start=GetTickCount();
}
else
{
file.SeekToEnd();
if(Value>0)
{
sprintf(temp,"%ld\t%d\t%2.5f\t%3.5f\t%2.5f\r\n",sumTime,
k,daFreq,ValueM,Value);
file.Write(temp,lstrlen(temp));
}
}

return 0;
}
UINT TemperatureChart(LPVOID pParam)
{
long i=0;
//int sum=0;
Start=GetTickCount();
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_TIME_CRITICAL,
0,CREATE_SUSPENDED,0);
pChildThread->m_bAutoDelete=FALSE;
pChildThread->ResumeThread();
file.SeekToEnd();
str="Respond Thread Start!";
file.Write(str,str.GetLength());
str.Format(" i=%d ",i);
file.Write(str,str.GetLength());
//WaitForSingleObject(pChildThread->m_hThread,(1/ff)*8000);
//waiting
DWORD result=WaitForSingleObject(pChildThread->m_hThread,INFINITE);
switch(result)
{
case WAIT_OBJECT_0:
str=" WAIT_OBJECT_0 ";
file.Write(str,str.GetLength());
break;
case WAIT_FAILED:
str=" WAIT_FAILED ";
file.Write(str,str.GetLength());
result=GetLastError();
str.Format("result=%ld",result);
file.Write(str,str.GetLength());
break;
default:
str.Format("result=%ld",result);
file.Write(str,str.GetLength());
}
//Sleep(1000);
DWORD dwExitCode;
::GetExitCodeThread(pChildThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
//Sleep(1000);
//::GetExitCodeThread(pChildThread->m_hThread,&dwExitCode);
}
else delete pChildThread;
//FreqencyValue+=0.2;
sequence[i]=1;
/*sum++;
if(sum%20==0)
{
DRV_DeviceClose((LONG far *)&daDriverHandle);
daDevice=0;
Sleep(30000);
//open da device
ErrCde = DRV_DeviceOpen(dwdaDeviceNum,(LONG far *)&daDriverHandle);
if (ErrCde != SUCCESS)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(NULL,(LPCSTR)szErrMsg,"Device Open",MB_OK);
return 0;
}
daDevice=1; //da device open
}*/
}
i++;
i=i%LenOfFrequencyArray;
if(i==LenOfFrequencyArray) i=0;
Now=GetTickCount();
str.Format("Now=%ld ",Now);
file.Write(str,str.GetLength());
//Sleep(1);
}
}
void CMainFrame::OnForceFrequence()
{
CWinThread* pTempChartThread=AfxBeginThread(TemperatureChart,this,
THREAD_PRIORITY_TIME_CRITICAL,0,CREATE_SUSPENDED ,0);
pTempChartThread->m_bAutoDelete=FALSE;
pTempChartThread->ResumeThread();
}
void CMainFrame::OnClose()
{
DWORD dwExitCode;
::GetExitCodeThread(pTempChartThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE)
{
//Sleep(1000);
//::GetExitCodeThread(pChildThread->m_hThread,&dwExitCode);
}
else delete pTempChartThread;
}
maomao2332 2003-12-16
  • 打赏
  • 举报
回复
代码部分请参照
http://expert.csdn.net/Expert/topic/2550/2550381.xml?temp=.1919519
maomao2332 2003-12-16
  • 打赏
  • 举报
回复
我用了call back(不知道使用方法对否)(先点debug的go,然后点了call back)
出来的提示:call Stack
(call stack unavailable while child is running)

请问是什么回事?多谢了
crystal_heart 2003-12-16
  • 打赏
  • 举报
回复
up
jian 2003-12-16
  • 打赏
  • 举报
回复
这是vc的代码吧。
查看callstack窗口定位你的出错代码
anothervip 2003-12-16
  • 打赏
  • 举报
回复
没有与句柄对应的指针。

贴贴你的代码吧。
dylang 2003-12-16
  • 打赏
  • 举报
回复
不知道
帮忙顶
superS 2003-12-16
  • 打赏
  • 举报
回复
一般都是内存问题,比如无意中改写了不应改写的内存等等。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧