关于易语言 多线程程序的稳定性 冲突 崩溃 解决办法汇总 by:angelc0de
(2014-05-14 00:38:50)
标签:
杂谈 |
下面是易语言多线程的稳定性解决一些新领悟。
原子锁对一个全局变量或者程序集变量赋值,会大大提高效率。弄明白临界区之后,我基本上都不用易语言的许可证了,因为闲麻烦。
再一个非官方的支持库里面的很多命令,在多线程中总是出现各种各样的问题,所以还是把自己常用的代码,直接封装成一个模块,自己使用吧,毕竟自己写的东西,自己最明白。
下面的是我一年以前的观点了,现在很多观念发生了变化,所以修改了一下。
---------------------------------------------
1、在多线程中尽量避免对可视化组件的频繁操作,多线程中对编辑框、超级列表框等等赋值时,一定要加临界区限制,但是取值应该不用吧,至少我是这样认为的。
2、尽量少用网上的一些朋友写的多线程模块,如果非要用,用那些论坛上级别高的会员发布的模块吧。尽量使用易语言官网的2012年8月7号的最新版多线程支持库,要比其他的所谓的多线程模块稳定的多。
3、易语言核心支持库以外的一些命令本身就不支持多线程。网友总结如:编码转换类的模块、读写配置项()命令、取现行时间()等等。
4、可以使用
5、有网友推荐把易语言多线程中的所有变量全部以数组形式出现,这种方法确实非常有效,但是会使软件耗费大量的系统资源(这个方法,angelc0de本人亲自测试过,确实非常有用,但是太麻烦了,每一个子线程中的局部变量是没有必要加线程锁的,以数组形式出现完全没有必要吧)。
6、多核CPU有可能会出现CPU亲和性问题,可以用
更多来源:http://www.zgjx114.com/fenlei/xiaoguotu.html
API_SetProcessAffinityMask(-1,1)或API_SetProcessAffinityMask(-1,2)函数解决,部分网友说SetThreadIdealProcessor这个函数可能会更好(angelc0de亲自测试了这个方法,会使软件崩溃的时间推后一些,但是最终还是崩溃掉)。
7、每一个线程创建的时候,会生成一个多线程句柄,线程完毕后,尽量关闭线程句柄,这个句柄多到一定数量不关闭,句柄资源将会耗尽,在一个,使用线程句柄尽量不要频繁地终止线程,那会造成内存泄露。
8、多线程中有可能产生冲突的共享资源,前后一定要加上线程锁。
9、网络上很多多线程源码,本来是很稳定的,但是作者放到网上的时候,把关键代码做了修改。所以,有的时候还是要自己思考解决办法的。
by:angelc0de