出现Runtime Error错误??怪

aliyan 2003-12-25 10:58:53
错误窗口如下:
标题 microsoft visual c++ Runtime library
提示:
Runtime Error
program:D:\sjjh\new\HXLOCK.exe
abnormal program termination
确定

现在我知道是
////注意2
AfxEndThread(0,1); 行出了问题

可是为什么在////注意1中用就没有问题,在////注意2中用就有问题??

我只是想结束这个进程呀。。

我的程序的寝始化启用了一个线程。。

m_Channels[i].m_pCThread=AfxBeginThread(LtoC,LPVOID(i),THREAD_PRIORITY_NORMAL);

在线程LtoC代码如下:
UINT LtoC(LPVOID pParam)
{
.
.
.
newjxh=0;
int BufLen ;
int times=0;
do
{




pMainDlg->m_Channels[chno].DisplayStatus("呼叫ID:"+CString(pMainDlg->m_Channels[chno].Calling));

if ( pMainDlg->m_Channels[chno].GetBoxdata( ) )
{
pMainDlg->m_Channels[chno].m_Application = APPBOXADM;

CString callstr;
callstr.Format("交接箱[%s]呼叫",pMainDlg->m_Channels[chno].m_bid);
EventDisplay(callstr);
} else
{
if ( pMainDlg->m_Channels[chno].GetJFdata( ) )
{
pMainDlg->m_Channels[chno].m_Application = APPJFDADM;
CString callstr;
callstr.Format("机房[%s]呼叫",pMainDlg->m_Channels[chno].m_jfid);
EventDisplay(callstr);
}
else
{

if ( pMainDlg->m_Channels[chno].GetJxhdata( ) )
{
pMainDlg->m_Channels[chno].m_Application = APPJXHADM;
Sleep(1000);
CString callstr;
callstr.Format("接线盒[%s]呼叫",pMainDlg->m_Channels[chno].m_hid);
EventDisplay(callstr);
}
else
{
if(newjxh)
{
Sleep(1000);
EventDisplay(_T("接收完毕:此接线盒尚未启用,请使用OMT将新装的接线盒电子锁启用!!!"));
}
else
{
EventDisplay(_T("找不到与来自"+CString(pMainDlg->m_Channels[chno].Calling)+"的呼叫相对应的纪录"));
}
pMainDlg->m_Channels[chno].Release();
AfxEndThread(0,1); /////注意1
}
}
}

//计算密码
CString SPwd;
SPwd.Format("%scccccccc",SysPwd);
SPwd=SPwd.Mid(0,8);
下面
do
{
memset(pMainDlg->m_Channels[chno].pwd,0x00,16);
for(BufLen=0;BufLen<16;BufLen++)
{
char DTMF=HX_GetMID(chno);
pMainDlg->m_Channels[chno].pwd[BufLen]=DtmfToHex(DTMF);
//把收到的字符转成正序
if(!DTMF)
{
pMainDlg->m_Channels[chno].DisplayStatus("超时错误");
info.Format("通道%d任务因出现超时错误而释放,可能有数据丢失,请排除错误后再试",chno+1);
EventDisplay(info);
pMainDlg->m_Channels[chno].Release();
return 0;
}
pMainDlg->m_Channels[chno].DisplayStatus(pMainDlg->m_Channels[chno].pwd);
Sleep(30);
}
pMainDlg->m_Channels[chno].pwds.Format("%s",pMainDlg->m_Channels[chno].pwd);
pMainDlg->m_Channels[chno].DisplayStatus("进行密码验证");
if (pMainDlg->m_Channels[chno].PwdCom(pMainDlg->m_Channels[chno].pwds)=="fd011848" )//
{
pMainDlg->m_Channels[chno].DisplayStatus("密码验证通过1");
pMainDlg->m_Channels[chno].pwdnum=1;
HX_Dial(chno,",1");
}
else
if (pMainDlg->m_Channels[chno].PwdCom(pMainDlg->m_Channels[chno].pwds)==SPwd)
{
pMainDlg->m_Channels[chno].DisplayStatus("进行密码通过2");
pMainDlg->m_Channels[chno].pwdnum=2;
HX_Dial(chno,",1");
}
else
{
pMainDlg->m_Channels[chno].DisplayStatus("密码验证失败");
HX_Dial(chno,",0");
times++;
if (times==3)
{
pMainDlg->m_Channels[chno].Release();
//AfxEndThread(0,1); ////注意2
return 0;
}
}
}while (pMainDlg->m_Channels[chno].pwdnum==0&×<3);
.
.
.
HX_DisposeRequest(chno); //调用上行函数
pMainDlg->m_Channels[chno].Release();
return 1;
}

在上面的代码中“///注意1”中用没有问题,可是我在“////注意2”中用就出现了Runtime Error的错误??

...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangweintk 2003-12-31
  • 打赏
  • 举报
回复
太长了,没太看清。

是不是线程还没启动,你就AfxEndThread了。
aliyan 2003-12-31
  • 打赏
  • 举报
回复
现在我是用return实现的。。可是我很迷糊的是为什么在那加了这句话就会出那个错误。。到底是什么引起的这个错误???
jimsleon 2003-12-25
  • 打赏
  • 举报
回复
为什么不用 return来实现?
aliyan 2003-12-25
  • 打赏
  • 举报
回复
???

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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