本帖最后由 凌哥 于 2020-2-20 16:39 编辑
相关帖子:
无可挑剔的多线程传任意数量参数例子,个人认为算是最完美、便捷的一种方案了
多线程高效率完美传递通用型数.据的一个例子,大家似乎对这个比较感兴趣?
取CPU基准速度(Ghz) - 敲黑板:易语言自定义数据类型数组内存格式及调用API时的转换
现在,又多了一个骚操作:将某个数.据类型/类 完全脱离易语言变量的束缚,把它变成孤儿指针
我从落叶的通用型哈希表那边学来的:哈希表类_汇编版(HashMap_ASM) 支持自定义数据值
核心思路如下图:

当我们在代码中引用 局_自定义数据 的时候,易语言才会初始化这个变量,如果没有引用,这个变量在编译后其实是不存在的
这时候,我们在子程序开头执行这么一段汇编代码:
mov eax,[ebp-0x4]
leave
ret 0x4
这段汇编代码的意思是,将第一个变量的值写入eax(返回值) 然后 ret 4 让易语言的这个子程序直接返回
这时候,因为我们用了汇编代码让子程序直接返回的,没有经过易语言的控制,所以这个变量1的地址不会被释放
到此,我们就成功将这个变量的数据完全独立出来了
接下来就是如何释放这个变量的数据呢?
原理看下图:

为什么这个子程序需要声明一个局部变量呢?而且还是静态属性(全局变量)
因为我们要让易语言IDE的语法检查通过,子程序返回值是 数据类型1 我们写的 返回() 也要是数据类型1
这个变量唯一的用途就是让我们通过语法检查仅此而已
接着我们再看汇编代码:
mov eax,[ebp+0xC]
leave
ret 0x8
这段汇编代码的意思是,将返回值的数据设置为参数1,然后依旧是强制返回,不通过易语言
子程序执行后,如果没有用变量来接收返回值的话,他就会被调用处释放
接下来看看如何使用:

我们可以直接申请出一段内存地址,写入自定义数据类型/类
然后将它传递给线程,并且不需要考虑局部变量释放的问题,因为 局_指针 里面存放的就是独立的变量数据
接着在线程里面,取回这个数据就可以完美读写了
怎样使用其它数据类型
将 动态数据类型(类) 中的 数据类型1 改成你需要操作的数据类型即可(共6处)
读写性能测试


动态xx类型.e
(640.19 KB, 下载次数: 322)
|