正文

FAQ 05:为什么可以在不结束线程的情况下关闭起handle2007-12-12 10:56:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/31393.html

分享到:

             线程的handle是指向“线程核心对象”,而不是指向线程本身。对大部分API而言,这项差异没什么影响。当调用CloseHandle()并给予它一个线程handle时,只不过是表示,希望自己和此核心对象不再有任何瓜葛。CloseHandle()惟一做的事情就是把引用计数减1。如果该值变成0,对象会自动被OS销毁。

            “线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对象的默认引用计数是2当调用CloseHandle()后,引用计数会减1,当线程结束时,引用计数再减1.只有当两件事情都发生了(不管顺序如何)的时候,这个对象才会被真正清除。

              “引用计数”机制保证新的线程有个地方可以写下返回值。这样的机制也保证旧线程能够读取那个返回值----只要她没有调用CloseHandle()。

               由于被CreateThread()传回的那个handle属进程所有,而非线程所有,所以很可能有一个新产生的线程调用CloseHandle(),取代原来的线程。MS Visual C++ runtime Library中等_beginthread()就是这么做的 。

阅读(2988) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册