得到一个线程的指针,如何终止线程?在线程类里加入一个方法:void CMyThread::DoEnd()
{
    AfxEndThread(-1,true);
}然后在外面调用: MyThreadPtr->DoEnd();//但执行到此时出错!!!是什么问题的???

解决方案 »

  1.   

    需要调用::GetExitCodeThread()获得线程返回代码.
      

  2.   

    GetExitCodeThread(hThread, &dCode);获得线程返回代码
    TerminateThread(hThread, dCode);   用代码终止线程 
    CloseHandle(hThread);
      

  3.   

    避免使用TerminateThread,因为不会释放分配了的资源。
    你在主线程中调DoEnd();结束的是主线程,这当然是不对的。
    你应该在线程中设一个标志,或者让线程等待一个事件什么的。
    在主线程改变这个标志,或激发事件,然后在线程中调AfxEndThread退出
      

  4.   

    现在是想这样的:在程序中开“三”个可以管理多个线程的总线程CAdminThread,每个CAdminThread总线程又可以新建、删除多个子线程CChildThread,但现在出现了一个问题:
     
    1. 在 CAdminThread 的 Run 方法里,用循环创建了几个CChildThread :int CAdminThread::Run()
    {
         while(true)
         {
              for(int i=0; i<3; i++)
             {
              CChildThread* m_Thread = (CChildThread*)AfxBeginThread(RUNTIME_CLASS(CChildThread), THREAD_PRIORITY_NORMAL,0, CREATE_SUSPENDED);         }
             Sleep(10*1000);
         }
    }2.此时所有线程在运行中...3.经过某一段时间,现在在 CAdminThread 中检测到要立即中止上面第一步中其中某一个 m_Thread 线程的运行,怎么控制啊??????4.上面的两个线程类要怎么改才可实现?????
      

  5.   

    ahao(天·狼·星星) 说的很对,尽量不用TerminateThread()
      

  6.   

    It's ok ! thanks !