精易论坛

标题: 呵呵仙_多线程传递自定义数据(免加延时方法) [打印本页]

作者: 呵呵仙    时间: 2017-7-11 19:52
标题: 呵呵仙_多线程传递自定义数据(免加延时方法)
本帖最后由 呵呵仙 于 2017-7-11 22:13 编辑

多线程传递自定义数据(免加延时方法).rar (1.76 KB, 下载次数: 603)


今天,好像又有人问,多线程不能交换数组变量.好吧!!我又来创新下以前的思路!!
以前的思路是加延时(30)的!!
这次不加了.可能聪明的朋友一眼看图就知是怎么回事了!!^_^
如果你想更快速,接近全部线程同步赋值的话.你只能把值写入数组,然后每个成员交换了.省掉再赋值!!
再加上面的死循环方法.按理就很快了!!
'========
'========
Kumor大说:"可能线程不安全"
写了个应用,给大家找下是否赋值错误了!!点了半小时了.^_^

多线程传递自定义数据(免加延时方法)=例子2.e (5.87 KB, 下载次数: 765)

作者: う网淅乄    时间: 2017-7-11 20:51
很吊很牛逼  还有就是那个逻辑开关是什么原理?  这个方法类似弄一个全局变量
作者: Kumor    时间: 2017-7-11 21:07
线程同步有专用的方法的,比如信道量。代码里的逻辑开关,有可能出现读写并发,线程不安全
作者: 呵呵仙    时间: 2017-7-11 21:16
本帖最后由 呵呵仙 于 2017-7-11 21:18 编辑
う网淅乄 发表于 2017-7-11 20:51
很吊很牛逼  还有就是那个逻辑开关是什么原理?  这个方法类似弄一个全局变量

就是那个局部变量和这个局部变量交换了数据的结果.一方是真,一方是假,交换成功了.死循环就假了.
就这原理.
按理,大家都是局部变量都是1:1的.(没勾静态,而且子程序一结束就自释放的),不存在第三者介入的.
作者: Kumor    时间: 2017-7-11 23:36
交换变量不是瞬间完成的,它有好几个步骤,这是你代码里“ASM_交换_变量交地址”的汇编代码
mov eax, dword ptr [ebp+08h]
mov ecx, dword ptr [ebp+0Ch]
mov edx, dword ptr [eax]
xchg dword ptr [ecx], edx
mov dword ptr [eax], edx
在执行完xchg dword ptr [ecx], edx的时候,逻辑开关已经变成假了,然而最后一步赋值还没完成。
这时候死循环那边已经满足跳出条件了,跳出后返回上层调用,重新进行一大堆赋值。现在CPU继续执行mov dword ptr [eax], edx这条赋值指令就没啥意义了,要么赋的值是错的(指针数据已经被修改),要么崩溃(循环跳出后局部变量B堆栈可能已经销毁)
测试不出问题原因是两者指令数量相差太大了,一边只要执行mov dword ptr [eax], edx这一条指令,另一边要执行上百条指令,所以每次都没出事。
但Windows下CPU时钟的分配不是按指令多少来的....这个不多说了,比较复杂。
作者: 呵呵仙    时间: 2017-7-12 00:11
Kumor 发表于 2017-7-11 23:36
交换变量不是瞬间完成的,它有好几个步骤,这是你代码里“ASM_交换_变量交地址”的汇编代码
mov eax, dwor ...

其实这个只是交换数据的指针.不是一个值一值的交换的!!
mov dword ptr [eax], edx
没这条,双方再赋值会挂的.你可以试下!!
作者: honfongu    时间: 2017-7-12 00:24
学习下………………
作者: y2j423633    时间: 2017-7-13 04:48
呵呵出品,必属精品
作者: 待删用户    时间: 2017-7-14 23:13
膜拜大佬。
作者: 103594381    时间: 2017-7-17 18:24
很吊很牛逼
作者: hy38669435    时间: 2017-7-19 23:18
路过,膜拜一下~
作者: jiang8125    时间: 2018-3-10 06:57
.版本 2
.支持库 EDataStructure
.支持库 iext

.子程序 除去重复
.参数 文本数组, 文本型, 数组
.局部变量 节点, 节点
.局部变量 count, 整数型

' 输出调试文本 (取数组成员数 (文本数组))
.变量循环首 (1, 取数组成员数 (文本数组), 1, count)
    节点.加入属性 (文本数组 [count], “”)
.变量循环尾 ()
节点.取全部属性名 (文本数组)
' 输出调试文本 (取数组成员数 (文本数组))

.子程序 _数据分类
.局部变量 正则, 正则表达式类
.局部变量 count, 整数型
.局部变量 Txt, 文本型, , "0"
.局部变量 Over_Txt, 文本型, , "0"

标签_状态.标题 = “总类文本初始化中...”
正则.创建 (“TZ[A-Za-z0-9]+-”, CKU文本, )
.计次循环首 (正则.取匹配数量 (), count)
    加入成员 (Txt, 正则.取匹配文本 (count, ))
    处理事件 ()
.计次循环尾 ()
除去重复 (Txt)
Over_Txt = Txt
.计次循环首 (取数组成员数 (Over_Txt), count)
    大类.插入项目 (count - 1, Over_Txt [count], )
    处理事件 ()
.计次循环尾 ()
标签_状态.标题 = “总类文本初完成!”

作者: 吾妻彪彪    时间: 2018-4-5 01:31
这招是不是在线程池里不好使啊,传参的线程池
作者: anim510    时间: 2018-4-28 10:43

作者: 网络注册会员    时间: 2018-5-5 08:42
又更新了哦
作者: 网络注册会员    时间: 2018-5-5 08:42
才发现我来支持下
作者: yuxuanju    时间: 2018-5-28 13:20
非常感谢,学习了(⊙o⊙)…☆⌒_⌒☆
作者: 重新归零    时间: 2018-6-8 19:00
非常好的技巧,谢谢分享
作者: 重新归零    时间: 2018-6-8 20:34
呵呵仙你好,
如果需要传递的参数是文本数组,自定义数据结构的时候该如何定义呀?
以及在子程序里面,要如何还原这个文本数组的字段呀


作者: 凉桔    时间: 2018-7-4 08:42
支持支持支持
作者: qq872208784    时间: 2018-7-8 18:49
很好,就是不知道稳不稳定,下载来看看
作者: fengyewl    时间: 2018-7-31 18:51
        支持开源~!感谢分享
作者: LixnKei    时间: 2018-9-22 23:24
正需要,谢谢楼主
作者: P神    时间: 2018-9-27 13:19
这个死循环起什么作用呢,看不懂
作者: 就是那个秋    时间: 2018-11-10 19:02
写了个应用,给大家找下是否赋值错误了!!点了半小时了.^_^
作者: 鬼和尚    时间: 2018-11-13 15:29
申请内存地址  然后读写?
作者: 春风秀才    时间: 2018-12-7 14:01
请问那个死循环有啥作用??一去掉就崩溃,为什么呢??
作者: cld878203423    时间: 2018-12-12 23:27
春风秀才 发表于 2018-12-7 14:01
请问那个死循环有啥作用??一去掉就崩溃,为什么呢??

在 子程序1() 里边有个 局部变量 A 数据类型1 (此时A的所有成员的值都是初始值,则 成员 逻辑型开关的值为
假) ,然后传入的是在按钮被单击子程序下的局部变量B 数据类型1 的地址(B的成员 逻辑型开关 的值为真),当在 子程序1() 里对 A 和 B 进行地址交换之后,B 的成员 逻辑型开关 的值就为 假 了,此时说明,在子程序1() 内通过B的地址(指针)拿到了 B 的数据,并成功的启动了线程(启动线程(,,,) 也是有耗时的),然后就可以正常操作。如果不加这个死循环,那么就会出现 线程内的子程序1()在操作B的地址,按钮被单击事件下的子程序也在操作B,然后就会出现崩了(句号后边纯属乱写,但意思是这么个意思)就是说两个或更多个地方,同时对一个地址(指针)进行操作,恩,应该就会炸了
作者: 自私的家伙    时间: 2018-12-26 13:34
看看 传参看看 传参看看 传参看看 传参看看 传参看看 传参看看 传参
作者: bisheng12    时间: 2019-1-19 15:24
支持下不错程度内容
作者: bisheng12    时间: 2019-1-19 15:24
支持下不错的那日柔佛那个
作者: hackjmp    时间: 2019-1-30 14:02
来看看。学习了
作者: hjdnwx    时间: 2019-3-14 17:26
00000000000000000000000000
作者: hjdnwx    时间: 2019-3-14 17:27
0000000000000000000
作者: xsyy001    时间: 2019-3-24 13:32
来学习看看,
作者: taodile    时间: 2019-3-24 22:55
学习学习 向大神致敬
作者: systemxzh    时间: 2019-4-4 11:04
看看 传参看看
作者: anquancs123    时间: 2019-5-18 00:53
找了半天 多谢
作者: 焉知非福    时间: 2019-5-29 17:27
下载来看看   正好需要
作者: 我会让你抓狂    时间: 2019-6-11 11:24
学习一下!!!!!
作者: tmtony    时间: 2019-7-29 21:25
怎么都要收钱啊
作者: ydhlg    时间: 2019-8-2 01:37
下载下来学习研究下
作者: mokazor    时间: 2019-9-10 22:21
感谢分享
作者: 魔头2    时间: 2019-9-24 00:26
cld878203423 发表于 2018-12-12 23:27
在 子程序1() 里边有个 局部变量 A 数据类型1 (此时A的所有成员的值都是初始值,则 成员 逻辑型开关的值 ...

   
作者: 不可胜言    时间: 2019-9-24 22:44
谢谢分享               
作者: 大表嫂    时间: 2020-3-20 17:26
真的大佬,佩服~~~~
作者: SoulLink    时间: 2020-4-2 19:29
真的大佬,佩服~~~~
作者: 胖虎O    时间: 2020-6-20 00:06
看下学习一下
作者: 824554926    时间: 2021-3-21 08:26
#在这里快速回复#          精币2枚 ,您帐号现有精币1枚
作者: mazhengyu    时间: 2021-3-21 10:52
写得好 啊
作者: cathrieir    时间: 2021-5-30 18:36
学习研究下多线程,谢谢!
作者: sclgame    时间: 2021-6-30 02:10
666666666666666666666
作者: guijem    时间: 2021-7-30 22:36
66666666666666666666666666
作者: 风波    时间: 2021-8-30 13:57
11111111111111111
作者: 风波    时间: 2021-8-30 13:59
66666666666666666666666666
作者: 风波    时间: 2021-8-30 14:00
66666666666666666666666666
作者: cocoazhang    时间: 2021-9-24 22:45
看下学习一下
作者: kmskik    时间: 2021-11-27 14:25
感谢分享谢谢
作者: rushiruhua    时间: 2022-1-4 19:11
6666666啊啊
作者: rushiruhua    时间: 2022-1-4 19:12
正好需要! 很感谢!!!!!!!!!!!!1
作者: 摸鱼鸽子    时间: 2022-9-6 12:19
6666666666666666
作者: zz1596    时间: 2022-9-7 20:26
66666666666666666666666
作者: chjchlove    时间: 2022-10-12 21:26
他羊肉汤羊肉汤有犹太人羊肉汤羊肉汤
作者: 我本土人    时间: 2022-11-17 15:49
谢谢分享!!
作者: zhuzhudiwo    时间: 2023-4-26 22:18

66666666666666666666666666
作者: gaolancao    时间: 2023-8-28 13:51
看看,支持下,,,,,,,,,,,,
作者: sunfly    时间: 2023-12-5 01:57
牛是牛看了28楼才大概知道死循环的意义。不过搞的好复杂
有没有更优化的直接传直接还原的写法?即一个方法传一个方法还原
作者: 呵呵仙    时间: 2023-12-5 07:53
sunfly 发表于 2023-12-5 01:57
牛是牛看了28楼才大概知道死循环的意义。不过搞的好复杂
有没有更优化的直接传直接还原的写法?即一个方法 ...

https://125.confly.eu.org/forum.php?mod ... 14755161&extra=
作者: xiyinyouxia    时间: 2024-4-1 13:33
感谢大佬分享,学习学习
作者: mnin    时间: 2024-5-6 20:23
感谢大佬分享,学习学习
作者: xiaoheshang    时间: 2024-6-3 18:24
感谢大佬分享,学习学习感谢大佬分享,学习学习
作者: 上千吨水    时间: 2024-6-24 04:11
多线程传递自定义数据(免加延时方法)=例子2.e (5.87 KB, 下载次
作者: aa6536    时间: 2024-8-3 16:01
感谢大佬分享,学习学习感谢大佬分享,学习学习
作者: a3363558    时间: 2025-5-7 18:51
支持开源~!感谢分享




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