精易论坛

标题: 【转发】关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总 [打印本页]

作者: 零点丶    时间: 2017-2-23 22:18
标题: 【转发】关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总
写多线程程序,一旦遇到线程访问冲突和软件崩溃的问题,就变得非常难以调试和解决,网络上给出的解释是,“一个线程想要访问该资源,另一个线程却要改变该资源”,就可能会出现各种各样的问题,而且在数据量或者是线程数目和总线程数目较少的情况下,难以察觉,但是100个线程同时运行且运行时间一长,软件往往就会崩溃掉。





[hide=d3]

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

易语言也是支持线程池、读写锁、信号量、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、网络上很多多线程源码,本来是很稳定的,但是作者放到网上的时候,把关键代码做了修改。所以,有的时候还是要自己思考解决办法的。



[/hide]



作者: 零点丶    时间: 2017-2-23 22:19

作者: 夜的静night    时间: 2017-2-23 22:22
看看然后?
作者: 零点丶    时间: 2017-2-23 22:22
夜的静night 发表于 2017-2-23 22:22
看看然后?

然后。。。没有然后
作者: 进击    时间: 2017-2-23 22:22
转载?原地址呢?

作者: 零点丶    时间: 2017-2-23 22:23
WYX89898 发表于 2017-2-23 22:22
转载?原地址呢?

给你源地址也没用,还不如不发,
作者: 网络注册会员    时间: 2017-2-23 22:25
看看是做什么的
作者: 零点丶    时间: 2017-2-23 22:26
零点网络_滑稽xd 发表于 2017-2-23 22:23
给你源地址也没用,还不如不发,

魔鬼作坊的。
作者: phinex    时间: 2017-2-23 22:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: Decimal    时间: 2017-2-23 22:27
什么鬼        

作者: 零点丶    时间: 2017-2-23 22:30
Decimal 发表于 2017-2-23 22:27
什么鬼

你觉得是什么鬼他就是什么鬼
作者: 为你走遍天涯    时间: 2017-2-23 22:31
好东西,赞一个。
作者: zby03772016    时间: 2017-2-23 22:37
感谢分享!~

作者: 酱叮当    时间: 2017-2-23 22:38
kk
作者: 十万个为什么    时间: 2017-2-23 22:47
赞一个
作者: 中国涛涛,中国    时间: 2017-2-23 22:51
看看,点赞

作者: 拉面    时间: 2017-2-23 23:05
感谢分享!~
作者: 拉面    时间: 2017-2-23 23:09
CPU亲和性  我有保留意见  
我测过过  那种方式启动线程  等级都是10的  所有CPU亲和性  没必要除非你要降低优先等级
作者: yangge    时间: 2017-2-23 23:17

作者: 风中冰雨    时间: 2017-2-23 23:18
看看.......
作者: 恶魔の佐翼    时间: 2017-2-23 23:25
看看..............
作者: 2446789312    时间: 2017-2-23 23:31
我看看!!!
作者: 晓风残月丶    时间: 2017-2-23 23:37
真是雪中送炭呐
作者: 2995455338    时间: 2017-2-23 23:41

赞一个
作者: zzh233    时间: 2017-2-23 23:43
许可证帮您忙
作者: 风起々云飞扬    时间: 2017-2-23 23:47
楼主,你是一个大好人!!
作者: 你好我的太阳    时间: 2017-2-23 23:51
我是来学习的 看看 怎么解决

作者: 常飞    时间: 2017-2-23 23:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: MRyue    时间: 2017-2-24 00:26
我是来学习的 看看 怎么解决
作者: q19950316    时间: 2017-2-24 01:09
看看              

作者: xslyhk    时间: 2017-2-24 01:18
谢谢分享哦
作者: 阿亮    时间: 2017-2-24 02:21
阿萨德发射点发

作者: mzhsohu    时间: 2017-2-24 02:49

我是来学习的 看看 怎么解决
作者: ikumu    时间: 2017-2-24 03:26
分享经验,学习
作者: 974717646    时间: 2017-2-24 04:19
好东西岂有不看之理?
作者: langlc    时间: 2017-2-24 04:38
是吗?我只是来看看?


作者: turtle乌龟    时间: 2017-2-24 04:43
这个看看 学习一下

作者: wujian321    时间: 2017-2-24 05:05
  看看什么好东西,谢谢楼主。

作者: w1374483599    时间: 2017-2-24 05:25
看看
作者: hy5188    时间: 2017-2-24 06:24
谢谢楼主分享

作者: 初学者初来乍到    时间: 2017-2-24 06:31
我来学习的
作者: 易容大师    时间: 2017-2-24 07:35
我是来学习的 看看 怎么解决
作者: 刘一缘    时间: 2017-2-24 07:49
我来看看                     
作者: xhxx123    时间: 2017-2-24 09:16
VCV型长响才vV型长响才V型从v
作者: l7518597    时间: 2017-2-24 09:21
感谢楼主分享

作者: 戏雨流年    时间: 2017-2-24 09:22

好东西岂有不看之理?
作者: b0y    时间: 2017-2-24 09:30
这个真不好查
作者: adoniskinger    时间: 2017-2-24 09:30
多线程的稳定性一直是考验易语言的
作者: lxc666    时间: 2017-2-24 09:40
我一定要看一看

作者: lxc666    时间: 2017-2-24 09:41
我一定要看一看

作者: 迷糊老师    时间: 2017-2-24 11:28
不错          学习一下

作者: 291138281    时间: 2017-2-24 12:01
学习了了了

作者: 戰神    时间: 2017-2-24 15:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: tsky1    时间: 2017-2-24 15:19
必须看看..

作者: 蒲公英哭泣三毛    时间: 2017-2-24 15:22
kankankan 看看是啥这么神秘

作者: fa360v    时间: 2017-2-24 16:33
学习zzzzz

作者: 易之用道    时间: 2017-2-25 11:40
感谢分享。

作者: aidijy    时间: 2017-2-25 11:52
虾米东西呢?
作者: 暗鹰    时间: 2017-2-25 12:07
支持一下。。。。

作者: haidao58    时间: 2017-2-25 12:19
关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总
作者: 悠悠易语言    时间: 2017-2-25 17:12
学习学习,多线程问题一直解决不了

作者: sktyou    时间: 2017-2-25 18:03
看看这个解释,最近在弄多线程

作者: 我是绵阳    时间: 2017-2-26 22:16
看看这是什么套路


作者: weather    时间: 2017-9-21 08:54

作者: w15570025332    时间: 2017-12-29 10:08
感谢楼主提供的多线程注意事项,谢谢了,学习了
作者: 取什么名    时间: 2018-6-29 07:56
关于易语言多线程的稳定性/冲突/崩溃/解决办法汇总
作者: 易先生    时间: 2018-9-1 10:41
如果能举个例子就更好了,谢谢分享。
作者: 慎言    时间: 2018-10-28 12:15

支持一下。。。。
作者: gzdzy    时间: 2018-11-5 19:18
学习学习,多线程问题一直弄不好,要是有一个完美例子就好了
作者: zdslhwq    时间: 2018-11-20 23:14
我是绵阳 发表于 2017-2-26 22:16
看看这是什么套路

看看这个解释,最近在弄多线程

作者: 帅气的Dawn    时间: 2018-12-5 20:23
感谢楼主感谢楼主
作者: 522404065    时间: 2019-1-10 15:21
感谢楼主感谢楼主
作者: hhz    时间: 2019-3-19 22:48
SetProcessAffinityMask 这个需要什么支持库,请大神指示一下
作者: liangjia    时间: 2019-5-8 15:27
这几天在这一个多线程程序,折腾了几天了,每次都是在代码中间那个循环里或出循环后闪退,谢谢楼主的思路,应该很有用
作者: GS小东    时间: 2019-5-16 13:51
hhz 发表于 2019-3-19 22:48
SetProcessAffinityMask 这个需要什么支持库,请大神指示一下

这个是API来的。
发不到代码只能这么发了。

.版本 2
.DLL命令 SetProcessAffinityMask, 逻辑型, "kernel32", "SetProcessAffinityMask"
    .参数 hProcess, 整数型, , -1自身进程
    .参数 dwProcessAffinityMask, 整数型, , 1 二进制转十进制 CPU1=0001=1 CPU2=0010=2...


作者: 10432649    时间: 2019-7-17 13:41
多线程崩溃确实很难排查,  有冲突提示就好了
作者: 529755681    时间: 2019-7-20 07:48
kujlfaesoas
作者: princeli    时间: 2019-8-17 16:26
取现行时间()咋就不是易语言核心支持库的命令了呢
作者: mxgl    时间: 2021-5-11 10:14
我最近写的也是这样。动不动就闪退了。。不知道是什么 问题。

作者: 96巅峰    时间: 2021-7-12 20:38

作者: 一生几擦肩    时间: 2021-11-19 21:46
感觉多线程支持库不太稳定
作者: yypd6699    时间: 2022-4-20 22:14

作者: 小叮    时间: 2022-4-22 16:23
6666666666666666
作者: yypd6699    时间: 2023-3-8 00:54

作者: 1573778307    时间: 2024-8-29 13:01
过来看看111222333




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4