TC官方合作论坛

 找回密码
 立即注册
查看: 2802|回复: 12

[问题] 线程里使用返回,等同于线程,关闭(),那资源是否也释放了呢

[复制链接]
发表于 2014-12-20 21:22:08 | 显示全部楼层 |阅读模式
本帖最后由 aimei_8866999 于 2014-12-20 23:19 编辑

比方说我们开启一个线程,,得到一个返回值就是线程句柄,当我们在线程执行中间来关闭它,就需要用,线程.关闭()这个命令,如果关闭了就要释放下线程的资源,这个时候我们就用,线程.关闭句柄(),官方的解释是,清理内核对象,释放资源
但是如果我们在线程结束或者中间 添加了 返回 命令 ,那还要 使用
线程.关闭句柄() 来释放资源吗
TC帮助文档上面介绍的
关闭句柄(句柄)
closehandle(handle)
百度了 一下这个函数 下面是百度介绍

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2014-12-20 22:49:13 | 显示全部楼层
要   
回复 支持 反对

使用道具 举报

发表于 2014-12-20 22:57:22 | 显示全部楼层
我也是醉了  好深奥的样子啊 线程关闭之后 应该是自动会销毁线程的资源  返回就不知道了  应该效果是一样的 线程调用函数返回 就是线程结束了 ,线程句柄也无效了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-20 23:53:53 | 显示全部楼层
梁夜 发表于 2014-12-20 22:57
我也是醉了  好深奥的样子啊 线程关闭之后 应该是自动会销毁线程的资源  返回就不知道了  应该效果是一样的 ...

你百度下吧 上面不是这么说的 线程句柄是系统内核资源,线程执行完之后并没有返还,还有貌似就是 线程句柄资源系统是有限制的,如果一直不返还,一直增加,就会出错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-21 00:24:10 | 显示全部楼层
好吧 还是百度强大 问题现在基本明了
请看百度上说的
CloseHandle到底做了什么?

当调用CloseHandle成功后,相关的内核对象的引用计数被减1。

这个函数做的工作就这么多。它并没有真正的关闭内核对象,只是将计数减1,也就是说,这个时候,如果这个内核对象的引用计数不为0的话,内核对象依然存在,如果你有办法找到他,那么你依然可以操作他。

一个比较常见的问题:

CreateThread后立即CloseHandle,为什么线程还在运行?

可以这样认为,CreateThread之后,线程的内核对象的引用计数为2,CloseHandle之后,如果线程还没有结束,那么他的引用计数是1,不是0,此时,系统不会回收内核对象,所以线程还在执行。直到线程执行结束,引用计数变成了0,此时,系统回收。


内核对象什么时候被删除?

以下两种情况,内核对象会被删除--系统回收:

    当内核对象的引用计数为0的时候
    进程结束后

如果内核对象的引用计数不为0,但是相关的进程都已经结束了,那么该内核对象会被系统回收。
参考:
进程确实没有机会执行自己的清除操作,但是操作系统可以在进程之后进行全面的清除,使得所有操作系统资源都不会保留下来。这意味着进程使用的所有内存均被释放,所有打开的文件全部关闭,所有内核对象的使用计数均被递减,同时所有的用户对象和GDI对象均被撤消。
       ----摘自Windows核心编程 第四版 4.3.3


内核对象泄露

内核对象在使用完毕之后,没有及时调用CloseHandle关闭,在该进程运行期间,将造成内核对象泄露。

内核对象泄露会对系统造成一定程度的负面影响,但进程结束退出后,操作系统会自动回收这些内核对象。
////以上是百度到的//////////////////////////////////////////////////////////////////////////////////////////////
现在我根据上面说的,理解成 启动一个线程,可以立即关闭线程句柄,这不影响线程的运行,以及中间对他的操作
比方说挂起,关闭
回复 支持 反对

使用道具 举报

发表于 2014-12-21 17:36:30 | 显示全部楼层
使用返回 你的意思里就是代码执行完毕了 这里应该是自动释放了的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-21 20:41:20 | 显示全部楼层
q273814 发表于 2014-12-21 17:36
使用返回 你的意思里就是代码执行完毕了 这里应该是自动释放了的

现在我只要开启线程,立即关闭句柄,目前测试不稳定,很容易崩溃,特别在 初始化那里的线程 不能开启了立即关闭句柄,这有点头大了
回复 支持 反对

使用道具 举报

发表于 2014-12-22 18:25:17 | 显示全部楼层
aimei_8866999 发表于 2014-12-21 20:41
现在我只要开启线程,立即关闭句柄,目前测试不稳定,很容易崩溃,特别在 初始化那里的线程 不能开启了立即关 ...

关闭那一句 判断下线程状态 在运行才关闭
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-23 00:49:02 | 显示全部楼层
q273814 发表于 2014-12-22 18:25
关闭那一句 判断下线程状态 在运行才关闭

判断了
回复 支持 反对

使用道具 举报

发表于 2014-12-23 15:32:42 | 显示全部楼层

好吧 我也实在想不到什么情况 毕竟我也不是很懂这些
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-20 13:10 , Processed in 0.050827 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表