开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 39865|回复: 84
收起左侧

[分享] 【转发】关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总

[复制链接]

结帖率:68% (27/40)
发表于 2017-2-23 22:18:20 | 显示全部楼层 |阅读模式   浙江省湖州市
写多线程程序,一旦遇到线程访问冲突和软件崩溃的问题,就变得非常难以调试和解决,网络上给出的解释是,“一个线程想要访问该资源,另一个线程却要改变该资源”,就可能会出现各种各样的问题,而且在数据量或者是线程数目和总线程数目较少的情况下,难以察觉,但是100个线程同时运行且运行时间一长,软件往往就会崩溃掉。





下面是易语言多线程的稳定性解决一些新领悟。

易语言也是支持线程池、读写锁、信号量、Event事件、临界区的、原子锁。

原子锁对一个全局变量或者程序集变量赋值,会大大提高效率。弄明白临界区之后,我基本上都不用易语言的许可证了,因为闲麻烦。

再一个非官方的支持库里面的很多命令,在多线程中总是出现各种各样的问题,所以还是把自己常用的代码,直接封装成一个模块,自己使用吧,毕竟自己写的东西,自己最明白。

下面的是我一年以前的观点了,现在很多观念发生了变化,所以修改了一下。

---------------------------------------------

    最近,angelc0de也遇到了这个难题,在网络上搜索了基本上所有关于解决易语言多线程冲突的办法,有些办法也是我之前没有预料到的,现在挑选几项常见错误给大家汇总一下(注,以下只是个人讲解,angelc0de本人并不能保证以前的观点全部正确,但是至少会给大家一些有用的参考)。

1、在多线程中尽量避免对可视化组件的频繁操作,多线程中对编辑框、超级列表框等等赋值时,一定要加临界区限制,但是取值应该不用吧,至少我是这样认为的。

2、尽量少用网上的一些朋友写的多线程模块,如果非要用,用那些论坛上级别高的会员发布的模块吧。尽量使用易语言官网的2012年8月7号的最新版多线程支持库,要比其他的所谓的多线程模块稳定的多。

3、易语言核心支持库以外的一些命令本身就不支持多线程。网友总结如:编码转换类的模块、读写配置项()命令、取现行时间()等等。

4、可以使用 标签反馈事件,这个命令在多线程中非常稳定,但是软件可能会比较卡,angelc0de本人没有测试过这个命令,闲麻烦。

5、有网友推荐把易语言多线程中的所有变量全部以数组形式出现,这种方法确实非常有效,但是会使软件耗费大量的系统资源(这个方法,angelc0de本人亲自测试过,确实非常有用,但是太麻烦了,每一个子线程中的局部变量是没有必要加线程锁的,以数组形式出现完全没有必要吧)。

6、多核CPU有可能会出现CPU亲和性问题,可以用API_SetProcessAffinityMask(-1,1)或API_SetProcessAffinityMask(-1,2)函数解决,部分网友说SetThreadIdealProcessor这个函数可能会更好(angelc0de亲自测试了这个方法,会使软件崩溃的时间推后一些,但是最终还是崩溃掉)。

7、每一个线程创建的时候,会生成一个多线程句柄,线程完毕后,尽量关闭线程句柄,这个句柄多到一定数量不关闭,句柄资源将会耗尽,在一个,使用线程句柄尽量不要频繁地终止线程,那会造成内存泄露。

8、多线程中有可能产生冲突的共享资源,前后一定要加上线程锁。

9、网络上很多多线程源码,本来是很稳定的,但是作者放到网上的时候,把关键代码做了修改。所以,有的时候还是要自己思考解决办法的。



本帖被以下淘专辑推荐:

结帖率:0% (0/2)
发表于 2023-3-8 00:54:03 | 显示全部楼层   河南省焦作市
回复 支持 反对

使用道具 举报

发表于 2022-4-22 16:23:35 | 显示全部楼层   广东省深圳市
6666666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2022-4-20 22:14:27 | 显示全部楼层   河南省焦作市
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
发表于 2021-11-19 21:46:27 | 显示全部楼层   江苏省无锡市
感觉多线程支持库不太稳定
回复 支持 反对

使用道具 举报

发表于 2021-7-12 20:38:32 | 显示全部楼层   湖南省长沙市
回复 支持 反对

使用道具 举报

发表于 2021-5-11 10:14:57 | 显示全部楼层   广东省广州市
我最近写的也是这样。动不动就闪退了。。不知道是什么 问题。
回复 支持 反对

使用道具 举报

发表于 2019-8-17 16:26:01 | 显示全部楼层   湖北省潜江市
取现行时间()咋就不是易语言核心支持库的命令了呢
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2019-7-20 07:48:42 | 显示全部楼层   河南省许昌市
kujlfaesoas
回复 支持 0 反对 1

使用道具 举报

结帖率:67% (10/15)
发表于 2019-7-17 13:41:39 | 显示全部楼层   四川省成都市
多线程崩溃确实很难排查,  有冲突提示就好了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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