线程在执行完毕,或中途被强行退出,那么线程内的对象会自动释放还是要手动去释放,怎样去完美释放。

解决方案 »

  1.   

    内核对象(文件、socket、mutex等)需要手动释放
    把内核对象放到全局列表中
    当然最好是让线程自己退出
      

  2.   


    比如说你在线程里面开了个Event对象那么你不要把Event的句柄保存在线程的局部变量里面,而是放在全局变量里面然后标识一下,那些全局变量是属于哪个线程的.再开另外一个线程,WaitForSingleObject需要被完美释放的线程(举个例子 不一定要WaitForSingleObject)当需要被释放资源的线程结束后,另外开了的监控线程检查全局变量,比如这里的Event有没有被释放掉 没有释放之.
      

  3.   

    最好是让线程自己return 返回,这样最安全~
      

  4.   

    我觉得4楼这个想法很不错,我通常的做法是在程序退出前做的判断,但发现真没这哥们的这个好用。赞一下。另外,我补充一下,尽量让线程自己去释放,不要强制结束线程。要温柔点,不要太粗暴。呵呵while(Flag)
    {
    }
    许多人不用Flag用1。这样不好。你用Flag,主程序要结束他将他设置为false就OK了。
    够温柔吧。呵呵
      

  5.   

    1 在线程外保存在线程中分配的资源引用
    2 ::WaitForSingleObject(线程句柄, INFINITE);
    3 释放已保存的在线程中分配的资源
      

  6.   


    没有完美释放的方式,这是Windows下的规则,遵守了就OK了
      

  7.   

    我觉得是具体的对象用具体的函数来关,只要你用了的,你都用相应的函数来关掉。比如CloseHandle,ReleaseMutex ====