线程无故退出
背景:一个程序(基于DLG)通过调用第三方提供的接口,进行读卡
附注:这个程序时通过两个COM口,来读卡的,两个COM口是轮换着读卡(不管当前有没有在读卡或者出现异常)
问题:在这个程序启动后,有时候不读卡,但是,程序时通过一个线程,循环(死循环)读卡的,如果读到卡,就在DLG界面
上显示
==============================================================================================================
实在找不问题在哪儿,只好在程序中加入日志,希望能通过日志发现问题
流程如下:
void lpRecvProc(LPVOID lpParam)
{
// 取得窗口指针
CMyCardDlg* pDlg=(CMyCardDlg*)lpParam;
// 初始化接口
// 初始化刷卡机端口
long ret = iniCom( pDlg->m_nCom);
long ret2=iniCom(pDlg->m_nCom2);
if(ret != 0||ret2!=0)
{
AfxMessageBox("端口初始化失败!");
return ;
}
bool bIsBusy=false;//false 表示当前没有处理卡信息,true 表示正在处理卡信息
bool bIsflag=false;//false 表示通过COM1口读卡,true 表示通过COM2口读卡
// 开始循环读卡
while(true)
{
if(bIsBusy==true)
{
WriteLog(正在处理卡信息);
continue;
}
// 取得用户卡信息
//if(bIsflag==false)
{
::WriteLog(com1读卡前);//表示当前用com1读卡,但是还没读 //
ret = readCard(com1,...)//通过接口读卡
//
::WriteLog(com1读卡后);//表示当前用com1读卡,已经读完卡
//
}
else
{
::WriteLog(com2读卡前);//表示当前用com2读卡,但是还没读 //
ret = readCard(com2,...)//通过接口读卡
//
::WriteLog(com2读卡后);//表示当前用com2读卡,已经读完卡
}
bIsBusy = true;
switch( ret)
{
case 0:// 成功
break;
case 1:// 无卡
case 2://
default:// 异常返回值
bIsBusy=false;
bIsflag=!bIsflag;
WriteLog(无卡);//
continue;
}
pDlg->SendMessage( WM_USER+2 );数据打包,请求服务处理
数据解析,将服务处理的结果值赋予ret
switch ( ret )
{
case 0:
显示刷卡成功
break;
case 1:
显示扣款成功
break;
default:
显示操作失败
break;
}
bIsBusy=false;
bIsflag=!bIsflag;
continue;
}
WriteLog(线程退出);
return;
}
==========================================
有点多,呵
再次出现这个问题时,程序执行到标记为红处后,就停止了,因为这个时候日志没有变化了
既在WriteLog(com1读卡前);//或者WriteLog(com2读卡前);//执行后,
线程就没有在循环工作了
-----------------------------
但这个是死循环,没有理由退出
望各位给给意见
多谢先了