1.概述:
  形如:CWinThread* pThread = AfxBeginThread(...);的语句。
在通常情况下,CWinThread的m_bAutoDelete成员变量被设置为True,
也就是说,当这个线程结束后CWinThread对象将被自动销毁,此时
pThread指针指向非法地址。
2.现在的情况是:
  我启动了无数个(随着程序的运行时间增加而增加)这样的线程,并且
记录下了每一个线程的pThread(AfxBeginThread的返回值)。但是随
着程序运行,实际上有大部分CWinThread对象已经被自动销毁了。
现在我想在程序终止运行之前检查是否是每一个线程都已经结束;
如果结束了,则不用管它;如果还在运行中,则WaitForSingleObject(...)。
3.问题:
  在只知道pThread的情况下,如何判断一个线程是否已经结束?
4.注意:
  a).在所有的指向CWinThread的指针中,有大部分是非法指针(因为对象已经在线程结束时被自动销毁)。
  b).我不想去手动管理每一个线程。

解决方案 »

  1.   

    可以试试...BOOL bRet = AfxIsMemoryBlock(pThread, sizeof(CWinThread));
    if(bRet)
    {
        if(pThread->m_hThread != NULL)
        {
           //还没有结束
        }
    }
      

  2.   

    Try thisif (pThread && GetExitCodeThread(pThread->m_hThread, &dwCode))
    {}
      

  3.   

    Try thisif (pThread && GetExitCodeThread(pThread->m_hThread, &dwCode))
    {
            if (dwCode == STILL_ACTIVE)
            {
                    // Thread is still active, 
                    WaitForSingleObject(...);
            }
    }