错误提示: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();
}
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();
}
解决方案 »
- 遇到个不好问别人的问题,怎么办呢。
- 大侠都看过来啊,谁有数字图像处理第二版中文版(冈萨雷斯)的源代码啊?
- HttpQueryInfo 返回400
- 菜单互斥问题
- 程序在VC++运行下出现stack overflow的错误, 怎样将VC默认的Stack扩大?
- 数据库连接问题?
- 帮我看看下面的代码,我执行SQLExecute(hstmt)的时候,返回总是-1
- ISupportErrorInfo的问题。。。
- 关于IHTMLElementCollection的问题,IE高手请帮忙呀。
- 请指教啊ADO连接数据库的问题
- 如何判断一个CString是否只由字母构成?
- 请问:我想用MFC实现菜单项调用非模态对话框,其如何实现
查看callstack窗口定位你的出错代码
出来的提示:call Stack
(call stack unavailable while child is running)请问是什么回事?多谢了
http://expert.csdn.net/Expert/topic/2550/2550381.xml?temp=.1919519
{
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;
}