我开始了一个线程
  m_pVideoThread=::AfxBeginThread(VideoThread,NULL,
THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
  m_pVideoThread->m_bAutoDelete=FALSE;
  m_pVideoThread->ResumeThread();我用下面的代码中止线程:
DWORD co;
::GetExitCodeThread(m_pVideoThread->m_hThread,&co);
if(co == STILL_ACTIVE)
{   
::TerminateThread(m_pVideoThread->m_hThread,co);
}
if(m_pVideoThread)
{
delete m_pVideoThread;
m_pVideoThread = NULL;
}可是这段代码执行后线程还在执行....
请问为什么啊?如何中止?

解决方案 »

  1.   

    根据GetExitCodeThread判断线程是否还在运行的做法不好。if(WAIT_TIMEOUT==WaitForSingleObject(m_pVideoThread->m_hThread,nTimeout))
    {
    TerminateThread(m_pVideoThrad->m_hThread,0);
    }
    ....
      

  2.   

    用ExitThread好,TerminateThread是异步的,不能保证成功
      

  3.   

    你检测TerminateThread的返回值没有?如果返回为0的话,需要调用GetLastError来获取到底出现了什么错误
      

  4.   

    TerminateThread的返回值也应该检查。
      

  5.   

    if (TerminateThread(m_pVideoThread->m_hThread,co))
      int ErrNO = GetLastError();简单点可以在这里设置一个断点,然后检查ErrNO到底是多少,然后去MSDN里面找到地这个是啥错误,或者调用CString::Format产生个消息,然后用MessageBox显示出来看……