为什么可以在不结束线程的情况下关闭其handle?
2016-11-06 12:36
218 查看
线程的 handle 是指向“线程核心对象”,而不是指向线程本身。对大部 分 API 而言,这项差异没什么影响。当你调用 CloseHandle( )并给予它一个 线程 handle 时,你只不过是表示,你希望自己和此核心对象不再有任何瓜葛。 CloseHandle( )唯一做的事情就是把引用计数减1。如果该值变成0,对象会 自动被操作系统摧毁。
“线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对 象的默认引用计数是 2。当你调用 CloseHandle( )时,引用计数下降 1,当线 程结束时,引用计数再降 1。只有当两件事情都发生了(不管顺序如何)的时 候,这个对象才会被真正清除。
“引用计数”机制保证新的线程有个地方可以写下其返回值。这样的机制 也保证旧线程能够读取那个返回值——只要它没有调用 CloseHandle( )。
“线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对 象的默认引用计数是 2。当你调用 CloseHandle( )时,引用计数下降 1,当线 程结束时,引用计数再降 1。只有当两件事情都发生了(不管顺序如何)的时 候,这个对象才会被真正清除。
“引用计数”机制保证新的线程有个地方可以写下其返回值。这样的机制 也保证旧线程能够读取那个返回值——只要它没有调用 CloseHandle( )。
相关文章推荐
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 为什么析构函数可以为虚函数,什么情况下需要将析构函数定义为虚函数?
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
- 为什么要关闭数据库连接,可以不关闭吗?
- 为什么要关闭数据库连接,可以不关闭吗?
- BGP为什么全网状连接下就可以关闭同步
- 为什么那英会逼迫姚贝娜唱自己不擅长的歌,并且是在姚女神明确表示抗拒的情况下?!姚女神的意外出局,苦瓜脸囧萱的被强“保”事件,让我今年提前结束看中国好声音了
- 中断为什么能结束线程
- 关于数据库连接数问题(为什么要关闭数据库连接,可以不关闭吗?)
- 为什么要关闭数据库连接,可以不关闭吗?
- MFC debug的时候可以用代码关闭线程 但是编译出来直接执行不可以
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- VC6中,为什么只有类中的static成员函数,才可以做为线程启动函数(ThreadProc)?
- C#窗口中创建了线程,关闭窗口,进程无法结束的问题
- 可以确定找对了窗体的handle,可是为什么如下代码发送组合键会没有反应呢?
- 回答为什么“接口和抽象类大部分情况可以互相代替,一般情况接口优先选择'”?