我程序的意图是,在主线程里启动一个定时器,没隔2秒钟去扫描一下,如果当前线程已经结束了,我就再启动
一次线程,如果当前线程还未结束,则什么也不做,等待下一个时钟消息。
现在的问题就是:我现在根本无法判断当前进程是真正结束了,还是正在运行呢?
我原先是通过一个m_bThreadFlag标志来判断当前线程是否正在运行的,但运行起来,很不准确,经常是当前线程还未结束
就又启了一个线程。
我查找了一些资料,好像通过GetExitCodeThread来判断当前程序是否在运行,不知用在我这里还行吗,此外我现在是把pScanThread->m_bAutoDelete=FALSE;//线程为手动删除
这样每次线程退出去之后,线程的资源是不是不会释放的,必须在我准备启动下一次线程时,把上一次的线程资源给释放掉了,
这样子做,对我判断线程是否结束有没有什么影响呢?大家帮帮忙啊,谢谢了程序如下://启动定时器,扫描设备是否存在,如果存在,即开启扫描线程
    SetTimer(11,2000,NULL);void CDlgInfo::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
    case 11:
if(m_bThreadFlag==FALSE)//当前线程没有启动,则启动当前线程
        { 
KillTimer(11);

//启动线程
      pScanThread=AfxBeginThread(ScanThread,this);
pScanThread->m_bAutoDelete=FALSE;//线程为手动删除
m_bThreadFlag=TRUE;

SetTimer(11,2000,NULL);

        }
   
  }
CDialog::OnTimer(nIDEvent);
}
UINT CDlgInfo::ScanThread( LPVOID pParam)
{
CDlgInfo *pDlg=(CDlgInfo *)pParam;
   


do
{
pDlg->SendSnmp();
Sleep(1000);
}
while(pDlg->m_bPowerFlag==TRUE); pDlg->m_bThreadFlag=FALSE;    
return 0;
}

解决方案 »

  1.   

    WaitForSingleObject
    判断返回值
      

  2.   

    用event内核事件控制流程
    WaitForSingleObject等待事件的发生等
      

  3.   

    线程结束后,pScanThread的值有没有什么变化呢,另外在我当前程序的情况下,只需判断一下当前线程是否结束,通过GetExitCodeThread函数和WaitForSingleObject有什么不同呢,哪个更好呢
      

  4.   

    先获得创建线程的handle,当线程结束后,线程handle会变为有信号状态,可以用WaitForSingleObject()来判断
      

  5.   

    设个全局变量:bool g_bFlag;
    离开线程时g_bFlag = true;
      

  6.   

    GetExitCodeThread  要自己去调用,去检测