GetExitCodeThread能检测到异常退出线程的状态吗?????????
线程函数:
这个函数执行了近10个小时后,异常退出了(先不说原因,因为我想验证GetExitCodeThread是不是真的能够检测任意一个线程当前的状态)
基于对话框中,运行后启动线程(PROCfunc处理函数),设定一个3秒的定时器检测这个线程当前的状态。
-----------------------
m_HReadCard-----对话框成员,存放线程句柄
IDT_RECARDER----#define IDT_RECARDER WM_USER+999
WriteLog(strtext);//写日志
DlgCloseCom();----------关闭端口,线程要用到串口
附注:线程退出,我根据程序的这个功能不能用了,而判断的,因为这个线程对应的就是这个功能
------------------------------
运行结果:
当线程没退出是,状态值是256
当线程退出后,根据日志判断,内容为:线程状态值为256
一直在写这个。
为什么前后,GetExitCodeThread返回的这个线程的值都为256?????
------------------------------
void PROCfunc(LPVOID lpParam)
{
.....
}
void CMyCardDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==IDT_RECARDER)
{
DWORD dwThreadId;
DWORD dwExitCode;
CString strtext;
if(GetExitCodeThread(m_HReadCard,&dwExitCode)&&dwExitCode==STILL_ACTIVE)
{
strtext.Format("线程状态值为:%d",dwExitCode);
WriteLog(strtext);
return;
}
else
{
strtext.Format("线程状态值为:%d",dwExitCode);
WriteLog(strtext);
}
DlgCloseCom();
if(m_HReadCard)
{
CloseHandle(m_HReadCard);
m_HReadCard=NULL;
}
m_HReadCard=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PROCfunc,this,0,&dwThreadId);
if(m_HReadCard==NULL)
{
MessageBox(_T("创建线程失败,请重启程序!"));
return;
}
}
//CDialog::OnTimer(nIDEvent);
}
[解决办法]
WaitForSingleObject()等待线程句柄等,判断线程是否异常退出
[解决办法]
你用WaitForSingleOjbect(HANDLE, INFINITE);
当线程结束时候,HANDLE有信号,WaitForSingleOjbect函数返回,否则等待。。。