首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

GetExitCodeThread能检测到错误退出线程的状态吗?

2012-01-18 
GetExitCodeThread能检测到异常退出线程的状态吗?????????线程函数:这个函数执行了近10个小时后,异常退出

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函数返回,否则等待。。。

热点排行