if (::GetExitCodeThread (AllExitTread->m_hThread, &dwExitCode)&&dwExitCode != STILL_ACTIVE) 
   {
     这里确定线程退出 终止整个程序   
   }  但是发现线程实际上还没退出 线程中的资源还没被释放 会出现内存泄露 谁知道是什么原因么?

解决方案 »

  1.   

    WaitForSingleObject(hYourThreadHandle);
    // thread over
    // do your ths
      

  2.   

    WaitForSingleObject 这个需要把m_bAutoDelete设置为false才可以截取到WAIT_OBJECT_0的很麻烦 所以用了GetExitCodeThread  
    谁知道是什么问题么
      

  3.   

    不会的,因为在操作系统里面都有系统线程的引用计数,当程序结束时,会自动释放资源,不会释放的是你自己动态分布的内存(new malloc等),但如果你调用了TerminateThread结束,那就不好说了!
    建议你在创建完线程以后,马上BOOL CloseHandle(HANDLE hObject);,这样就可能会马上释放!
      

  4.   

    使用return 0;退出的
    没有动态申请的内存 new malloc有谁知道是什么问题么给线程发送wm_xxx
    线程中代码是 peekmessage(...)
    处理wm_xxx消息 
    do sth...
    return 0;然后GetExitCodeThread 检测 发现已经得到线程退出的代码 但是do sth...这步还没执行完毕
      

  5.   

    使用return 0;退出的 
    没有动态申请的内存 new malloc 有谁知道是什么问题么 给线程发送wm_xxx 
    线程中代码是 peekmessage(...) 
    处理wm_xxx消息 
    do sth... 
    return 0; 然后GetExitCodeThread 检测 发现已经得到线程退出 !=still_alive 但是do sth...这步还没执行完毕 
      

  6.   

    PostThreadMessage(PID,WM_QUIT,0,0);再试试!
      

  7.   

    这不可能!如果指向到return 但是do sth还没执行,这完全没有可能
    出现这种判断的可能原因有两个:
    1。你检测“do sth”是不是做了的方法有问题
    2。你以为一定是通过return返回的,实际上线程不是通过这种方式退出的这上面两个可能必俱其一,不可能跳过中间代码去执行return 0
      

  8.   

    《Inside Visual C++》至理名言:
    使用全局变量让主线程和辅线程进行通讯最简便。如果一定要释放,手动调用GlobalFree释放掉。
      

  9.   

    if (::GetExitCodeThread (AllExitTread->m_hThread, &dwExitCode)&&dwExitCode != STILL_ACTIVE) 另外,请把GetExitCodeThread放在if前面,搞不好就让if把语句也当做判断条件了。
      

  10.   

    是不是调用了terminatethread()??这个API经常造成leak