精易论坛

标题: 易语言多线程的稳定性 [打印本页]

作者: Happyxxs    时间: 2014-4-26 10:17
标题: 易语言多线程的稳定性

[e]
.版本 2
.支持库 iext
.支持库 EThread

.计次循环首 (超级列表框1.取表项数 (), )
启动线程 (&线程运作, , 线程ID)
.计次循环尾 ()

[/e]
在这里执行完这个还有一个时钟,就是几秒再执行一上面的代码。

[e]
.版本 2
.支持库 EThread

进入许可区 (许可证)
机型分割 = 分割文本 (机型, “|”, )
商品名称3 = 分割文本 (商品名称2, “|”, )
处理表项记录 = 处理表项记录 + 1
局部记录 = 处理表项记录 - 1 ' 多线程运作 赶紧的把表项 记录到局部
线程IDs = 线程ID
退出许可区 (许可证)
关闭线程句柄 (线程IDs)

[/e]
线程运作里面有网页访问,计次循环,这个计次循环是循环访问网页7次。
然后有置标题。
就是不稳定。运行一会就卡死了 。

作者: 家范    时间: 2014-4-26 10:17
其实多线程  没这么难   你知道你为什么崩溃吗?
我不用猜都知道你用的 第三方  网页访问模块  
你如果把  网页访问 改成  HTTP读文件(“URL”)  还崩溃的话你来找我

或者你坚持  要使用的话也可以   用这个命令  保你程序不崩溃  而且 连许可证都需要加   编程的时候 完成当 平时一样编程  

只要在  

_启动窗口创建完毕()
线程_设置亲和性() ' 只要加上这条命令 保你无事

多线程1.6.zip (8.47 KB, 下载次数: 1616)


上一版本源码+控制例子    http://125.confly.eu.org/thread-13785104-1-1.html




补充内容 (2015-6-20 21:09):
连许可证都不需要加   打少个字    概念不一样 - -
作者: 蕃茄炒饭    时间: 2014-4-26 11:17
之乎者也多线程教程,先看看教程,学习学习吧

多线程注意事项:

1、速度不能过快

2、使用许可区

3、少操作控件

4、不要从全局变量里获取数据
作者: 剧终0616    时间: 2014-6-4 01:49
蕃茄炒饭 发表于 2014-4-26 11:17
之乎者也多线程教程,先看看教程,学习学习吧

多线程注意事项:

之乎者也多线程讲得不好。。速度完全可以很快,注意自己代码的已经,内存的控制,许可区时用在公共资源的写入方面,且要避免许可区代码耗时太多,,控件可以操作,超级列表框这种无需加锁,其他可用消息机制,,全局变量可以获取数据。。读数据的不影响,只有写数据才会内存冲突。。。枫影多线程才比较好。。
作者: Aaaur    时间: 2014-6-4 06:21
我记得多线程有一段DLL是可以优化程序内存 大大减少了崩溃现象
作者: psugwycwxf    时间: 2014-6-4 07:17
{:4_260: 看看学习,逛逛[增长知识
作者: 酷龙一族    时间: 2014-6-4 07:19
二楼正解 但我建议你加上一个线程调整 多线程这东西未必就一定是程序代码问题 也关系到你网络跟硬件的并行处理 先用默认1线程慢慢增加 看看能达到多少
作者: Demigod    时间: 2015-6-20 20:25
二楼说得不错,可惜没有例程。
作者: Demigod    时间: 2015-6-20 20:31
这是别人对于多线程的一些理解以及见解
如有不对的地方欢迎指出但是勿喷(不喜勿看)
1.首先关于多线程
多线程是指同时多条线程进行操作或许很疑惑

上图就是单线程操作(即是主线程),下图为多线程操作

从图片长度就可以看出那个更快一些
但是,凡事就怕有但是,事无绝对.任何事都需要视具体情况而定.
实际上创造一个线程需要时间(系统资源开销),销毁一个线程也需要时间.如果频繁的创建销毁线程会带来大量的时间浪费

上图虽然用到了多线程
但是还不如使用单线程
线程在创建以及销毁的时候都会有一部分资源开销
2.线程的用途
1.解决高堵塞
2.需要高效率充分利用多核心
   关于高堵塞
通常用于网络方面的利用
假设a与b传输数据的延时是一百秒,每一次传输最多是10个字节(只是假设)
单线程情况下就是,没一百秒最多传输十个字节,一千秒一百个.
多线程情况下呢?
a与b同时建立一百个传输通道,那么速度就是每秒钟十个字节,每一千秒十kb(约等于)
这只是为了凸显多线程的效果而假设的数据,实际情况根据具体网络环境而定.
   关于高效率充分利用多核心
这个需要视实际情况而定,不过现在多核心处理器已经普及了.
水桶的水位取决于最低的短板(水桶效应),而电脑的短板往往不是cpu以及内存,而是硬盘i/o.
所以编程设计的时候要充分的考虑到这些.
只有你富足的资源可以浪费,你本身就性能比较弱的零件经不起你的浪费
浪费的后果就是让你的程序变得缓慢,用户体验非常的差.
如何的充分的利用多线程这是非常复杂的东西,从程序最初结构设计就需要考虑到,并不是说你用一个"启动线程"就是多线程了,就会提高效率了,有时候反倒会适得其反.
关于这个再次不多说,因为要求这种运算级别的程序一般不会用易语言写(囧),用多线程的时候一定要慎重选择以及构思,修改代码是非常麻烦以及痛苦的,多线程会带来很多的负面效应在此不多说,后面会详细解答.
3.关于多线程的有可能会出现的问题
1.程序崩溃
2.程序崩溃
3.程序崩溃
4.程序崩溃
好吧其实多线程如果构思程序的时候没有考虑周全会出现很多种问题,但是表现情况都一样程序崩溃程序退出.
1.除局部以外(局部不包括静态)文本,字节集,或任意类型数组,或者说出了几个数值型的以及字节型的.http://blog.csdn.net/q349980363/article/details/8012495(里面几个没必要说明的可以进行多线程读写操作,其他以外的都有可能引发问题)
顺便提一点,多线程程序在win7下稳定得多,相对于xp...........
关于为什么会引起崩溃
线程a对变量操作的时候b也操作,a改写了文本申请了新的内存地址同时修改了指针然后释放了原指针,但是b读取了原指针需要读取数据的时候,a已经把指针释放了.
那样就会内存访问错误,就会提示XXXXX内存访问错误.




这只是关于多线程的一个大概的讲解,因为看到论坛有很多人对多线程有很多的误区,所以使用图文并茂的方式来讲解一下方便理解.
因为是临时要写所以也没什么准备比较短篇,以后还会继续发布教程

此系列教程列表http://blog.csdn.net/q349980363/article/details/9338443

作者: 家范    时间: 2015-6-20 21:12
Demigod 发表于 2015-6-20 20:31
这是别人对于多线程的一些理解以及见解
如有不对的地方欢迎指出但是勿喷(不喜勿看)
1.首先关于多线程

无语啊   人家的问题是 14年的   
作者: 剩下我de孩子气    时间: 2015-6-21 08:11
用鱼刺多线程吧 个人感觉不错的
作者: 午夜时刻    时间: 2015-6-22 19:45
家范 发表于 2015-6-20 21:12
无语啊   人家的问题是 14年的

大神啊,给你跪了,真不蹦了
作者: 午夜时刻    时间: 2015-6-22 19:54
家范 发表于 2015-6-20 21:12
无语啊   人家的问题是 14年的

但是速度变慢了。。多核变单核?
作者: 家范    时间: 2015-6-24 11:37
午夜时刻 发表于 2015-6-22 19:54
但是速度变慢了。。多核变单核?

如果是 网页操作的话  单核 与多核  一样的,因为  网速就是你的瓶颈,
作者: 家范    时间: 2015-6-24 11:39
午夜时刻 发表于 2015-6-22 19:54
但是速度变慢了。。多核变单核?

还有就是   完全 自己写一个  winhttp 对象  不用第三方的 网页操作命令 就可以
作者: 午夜时刻    时间: 2015-6-25 12:55
家范 发表于 2015-6-24 11:39
还有就是   完全 自己写一个  winhttp 对象  不用第三方的 网页操作命令 就可以

自己写的winhttp和超级网页访问有什么不同吗..我看模块源码好像没什么会引起崩溃的东西
作者: 午夜时刻    时间: 2015-6-25 13:03

而且我软件附加处理的东西也比较多,所以可怜的CPU就变成这样了,请问有没有办法在多核的情况下随机指定一个CPU呢
我有用SetProcessAffinityMask测试过,但是还是会崩,求指教




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