开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3522|回复: 15
收起左侧

[已解决] 精易模块_关于线程的BUG

[复制链接]

结帖率:98% (48/49)
发表于 2015-7-8 17:17:35 | 显示全部楼层 |阅读模式   广东省广州市
本帖最后由 萧阳天 于 2015-7-8 18:52 编辑

QQ截图20150708170853.jpg
QQ截图20150708170549.jpg

QQ截图20150708170629.jpg


旧版命令是精易模块现在在用的. 新版的是我自己修改的

旧版命令申请到句柄之后 下次再启动线程不会释放之前的句柄 而是继续累计.在多线程或者线程循环的环境下影响很大.长期运行的结果不言而喻.

例子.zip (21.4 KB, 下载次数: 4)

结帖率:98% (48/49)

签到天数: 18 天

 楼主| 发表于 2015-7-11 23:38:26 | 显示全部楼层   广东省广州市
御风软件 发表于 2015-7-11 20:40
我就是不知道,他那个句柄数,是单纯的计数,还是保存了线程返回的句柄的一个队列
线程执行完成了会自己 ...

任务管理器显示的句柄数不仅仅是计数 而是代表现有的句柄数量.

不及时关闭的话_句柄覆盖之后就没办法再进行释放了.从而会申请了很多无用的句柄.

问题我已经明确指出了.句柄无限制增长到最后只会使软件出错.

虽然有部分人懂如何处理.但是大多数新手完全不会,我已经遇到无数个这样的求助例子.

我发上来的这个是随手写的 的确有瑕疵. 后来我又重新做了一个更完善的版本.
这个帖子不用再回复了
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 21 天

发表于 2015-7-11 20:40:23 | 显示全部楼层   广东省阳江市
Mr.Yang 发表于 2015-7-11 19:49
在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1 ...

我就是不知道,他那个句柄数,是单纯的计数,还是保存了线程返回的句柄的一个队列
线程执行完成了会自己销毁的,如果是保存了句柄,那就是保存了无用的句柄,但是不会使用到呀
如果是,单纯的奇数,就不会有任何的影响,而现在,我觉得,他那个应该不是单纯的计数
因此,保存了这么多的整数型的句柄,那应该会多占用一些内存。。。就这个影响而已
其实,就算是真正的保存了那么多句柄,那应该也只是个标记,在进程关闭的时候进行清理
那么,对软件来说,是不算什么影响的,影响的只是用户电脑,关闭软件要把标记的对象清理

所以,我觉得这个影响不大呀,用户自己处理,就要不用一个对象,就自己去CloseHandle来删除一个
如果不处理,在软件关闭的时候,系统自动的去把全部的对象,CloseHandle来删除掉
如果不是对内存,CPU很苛刻的,这完全不需要自己去处理,就是浪费了些内存而已。。。
回复 支持 反对

使用道具 举报

结帖率:98% (48/49)

签到天数: 18 天

 楼主| 发表于 2015-7-11 19:49:44 | 显示全部楼层   广东省广州市
御风软件 发表于 2015-7-11 19:35
他的本意应该是线程执行完成了,调用CloseHandle,减少句柄数
因为,CreateThread  不管你是否接收,都 ...

在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。
若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程度上的负面影响。但当进程结束退出后,系统会自动清理这些资源。

这个不像内存溢出 短时间内是不会对软件造成影响的 但是长时间运行或者频繁调用会导致软件的崩溃 就比如我说的多线程或者线程循环 影响很大.

至于你说的91他运行后就是五万句柄的 后面长时间运行并不会增长.但是按照现在的线程漏洞会无止境增长.

我现在已经找到比这个更好的方法解决这个问题了_我也是出于对模块的支持而提出的意见.采纳与否还是模块更新人员决定 我尊重他们的意向.
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 21 天

发表于 2015-7-11 19:35:26 | 显示全部楼层   广东省阳江市
萧阳天 发表于 2015-7-8 18:52
CreateThread  创建的线程返回线句柄正常情况下用CloseHandle是内核减1操作,并不会影响线程正常执行,但返 ...

他的本意应该是线程执行完成了,调用CloseHandle,减少句柄数
因为,CreateThread  不管你是否接收,都会产生一个句柄的

但是,他这个实现也不算好,也不见得有什么用,就为了单纯的减少句柄计数
要知道,他的意思是说大量循环的,那么如果是大量循环,那你要自己弄个数组来保存句柄
不然,你一个循环,不断的创建线程,你那里知道那个线程执行完成了呢?就启动一条就关闭上条?
所以,这本来就是得不偿失的东西。。。我想一般人也不会为了这样去做更多的东西。。。

虽然我不懂那个句柄数是什么算的,如果他只是一个整数,单纯的+1,-1来算的呢?
那么,他可以保存32亿的次数,所以,无论是1还是最大值,他永远也只占用你4个字节的内存而已
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 21 天

发表于 2015-7-11 19:23:59 | 显示全部楼层   广东省阳江市
囧,不知道这个线程句柄计数有什么影响,你看你截图的那个91的,50337,5万多句柄。。。
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:87% (13/15)
发表于 2015-7-8 19:49:07 | 显示全部楼层   广西壮族自治区玉林市
用户自行关闭而不是命令自行关闭
回复 支持 反对

使用道具 举报

结帖率:98% (48/49)

签到天数: 18 天

 楼主| 发表于 2015-7-8 19:44:05 | 显示全部楼层   广东省广州市
ds9660 发表于 2015-7-8 18:49
使用方法不对。
如果你在启动线程的时候关闭了句柄,那么后续对该线程的挂起、恢复等操作都没有办法进行了 ...

关闭句柄命令这个也是我提出的.

原本的精易模块是不存在这个命令 是叫做销毁

句柄=启动线程(&XX)

既然用户打算覆盖句柄的话 那么原来的句柄对他来说已经是没有操作的意义的.那么不删除有什么用呢?

CloseHandle之后并不会对正在执行的线程有影响 这样一举两得 为什么不好呢?
回复 支持 反对

使用道具 举报

结帖率:98% (48/49)

签到天数: 18 天

 楼主| 发表于 2015-7-8 19:41:39 | 显示全部楼层   广东省广州市
萧阳天 发表于 2015-7-8 18:52
CreateThread  创建的线程返回线句柄正常情况下用CloseHandle是内核减1操作,并不会影响线程正常执行,但返 ...

别人提交的参考型的句柄参数 那就代表原来的句柄是对他没用的 他才覆盖原来的句柄.

如果打算覆盖句柄的话 那么之前的句柄就已经肯定是没用的了 那不删除有什么用呢?

CloseHandle之后 线程还会继续执行 那么就不会影响中途还在运行的线程.

一举两得 为什么不这样修改呢?
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2015-7-8 19:32:12 | 显示全部楼层   浙江省金华市
萧阳天 发表于 2015-7-8 18:52
CreateThread  创建的线程返回线句柄正常情况下用CloseHandle是内核减1操作,并不会影响线程正常执行,但返 ...

为什么没有针对精易模块里面子程序的使用例程?你看连高手都会出错。。。
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)
发表于 2015-7-8 18:52:32 | 显示全部楼层   广东省东莞市
CreateThread  创建的线程返回线句柄正常情况下用CloseHandle是内核减1操作,并不会影响线程正常执行,但返回的线程句柄还有其它操作,如 挂起、设置优先级等都需要内核句柄

点评

看12楼   广东省广州市  发表于 2015-7-11 19:52
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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