线程无故退出

wjx_0_2001 wjx_0_2001 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
背景:一个程序(基于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读卡前);//执行后,


线程就没有在循环工作了


-----------------------------
但这个是死循环,没有理由退出

望各位给给意见

多谢先了

...全文

相关推荐

程序启动退出 多线程

程序启动时和退出时检查各项参数是否正确,多线程模拟采集程序需要监控的数据

蚂蚁&大象

实用代码脚本易语言源码线程类

实用代码脚本易语言源码线程类

zz_ll9023

JAVA进程突然消失问题解决方案

主要介绍了JAVA进程突然消失问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38731553

his.rar_tomcat

tomcat在运行中,有时候会自己退出,本程序可以监控系统中是否有tomcat运行

朱moyimi

单片机与DSP中的单片机程序死机跑飞六大原因

单片机程序死机,跑飞了可以从以下几个方面查找原因:  1.意外中断。  是否打开了某个中断,但是没有响应和**中端标志,导致程序一直进入中断,造成死机假象。  2. 中断变量处理不妥。  若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加 volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。  3. 地址溢出,常见错误为指针操作错误。  我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造

weixin_38686860
评论 27
收藏 已收藏
分享
返回顶部
wjx_0_2001
进程/线程/DLL 15,465 成员 49,169 内容