天马阁

 找回密码
 立即注册
                                        →→→→→→→→→→→→ 1点击查看所有VIP教程目录长列表(总教程数269个) 2办理VIP详情进入 ←←←←←←←←←←←←
1 x64CE与x64dbg入门基础教程 7课 已完结 2 x64汇编语言基础教程 16课 已完结 3 x64辅助入门基础教程 9课 已完结 4 C++x64内存辅助实战技术教程 149课 已完结
5 C++x64内存检测与过检测技术教程 10课 已完结 6 C+x64二叉树分析遍历与LUA自动登陆教程 19课已完结 7 C++BT功能原理与x64实战教程 29课 已完结 8 C+FPS框透视与自瞄x64实现原理及防护思路 30课完结
64驱?封? 9 64反驱? 10 64位V? 11 绝? 12 ???课?
13 64透 ? 14 64U ? 15 64Q ? 16 64功 ?
17 64U ? 18 64模 ? 19 64多 ? 20 64网 ?
21 64注 ? 22 64火 ? 23 64棋 ? 24 64自二链L?
25 64破 ? VIP会员办理QQ: 89986068   
【请先加好友,然后到好友列表双击联系客服办理,不然可能无法接受到信息。】
27 加入2000人交流群637034024 3 28 免责声明?
查看: 10051|回复: 1

关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总

[复制链接]

12

主题

1

回帖

15

积分

编程入门

Rank: 1

天马币
24
发表于 2024-3-4 09:34:25 | 显示全部楼层 |阅读模式
写多线程程序,一旦遇到线程访问冲突和软件崩溃的问题,就变得非常难以调试和解决,网络上给出的解释是,“一个线程想要访问该资源,另一个线程却要改变该资源”,就可能会出现各种各样的问题,而且在数据量或者是线程数目和总线程数目较少的情况下,难以察觉,但是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、网络上很多多线程源码,本来是很稳定的,但是作者放到网上的时候,把关键代码做了修改。所以,有的时候还是要自己思考解决办法的。

回复

使用道具 举报

9

主题

1

回帖

12

积分

编程入门

Rank: 1

天马币
18
发表于 2024-3-4 12:45:29 | 显示全部楼层
感谢分享,学习了。
回复

使用道具 举报

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

本版积分规则

天马阁|C/C++辅助教程|安卓逆向安全| 论坛导航|免责申明|Archiver||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表天马阁立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2021 All Right Reserved.
快速回复 返回顶部 返回列表