精易论坛

标题: 组件线程中安全调用命令自动封装工具_源码1.2 [打印本页]

作者: xiaole283    时间: 2025-4-10 18:59
标题: 组件线程中安全调用命令自动封装工具_源码1.2
本帖最后由 xiaole283 于 2025-4-10 19:07 编辑

组件线程中安全调用命令自动封装工具_源码

前言


windows组件在线程中,是无法安全调用与访问的,易语言提供了标签回调事件来解决这个问题。

有没有办法像原生命令一样访问组件,却不会引发安全问题呢?


本源码解决了什么?

1.封装了组件线程中安全访问组件类(Demo源码中的‘线程组件操作类’),此类通过子类化消息将组件命令以回调子程序的方式推送到主线程。

     源码使用了本人开发的结构体支持库和模块,未来也将整理开源。

2.开发了支持库组件的自动封装工具,通过本工具无需繁琐的一个一个命令去封装,所有命令、属性都自动封装。

3.支持windows组件与Exui支持库组件的全自动封装。


本源码实现了以原生命令的方式进行组件的操作与访问,避免了多线程下崩溃的风险。
自动封装工具演示,分辨率较大,点击放大观看


作者QQ289815204,转发、修改请注明来源

组件线程中安全调用命令自动封装工具_源码1.2.part1.rar (3.5 MB, 下载次数: 19)
组件线程中安全调用命令自动封装工具_源码1.2.part2.rar (2.68 MB, 下载次数: 18)

更新日志:
20250410
自动生成工具更新到1.2
1.自动生成的封装代码添加类方法:调用反馈事件。类似标签.调用反馈事件,不同的是允许传入几乎所有类型,也可以返回非数组的基本类型、文本型、字节集,返回其他类型需用参数返回,具体参考例子。
2.为了支持调用反馈事件,更新了模块和支持库。
3.修复了线程组件操作类中异步模式的许可为正常退出问题。

20250407
自动生成工具更新到1.1
1.屏蔽线程组件安全操作WindowsDemo.e中exui部分的代码,若没有exui支持库也能打开
2.修复返回数组型的bug
3.打包编译自动生成工具,若没有安装exui也能使用



补充内容 (2025-4-14 11:12):
更新到1.3 https://125.confly.eu.org/thread-14853540-1-1.html
作者: hhf4977    时间: 2025-4-10 19:08
感谢分享
作者: 亿万    时间: 2025-4-10 20:09
感谢分享
作者: 地狱弑天    时间: 2025-4-10 21:25
嗯??  突然眼前一亮
作者: 皮皮君    时间: 2025-4-10 22:50
打包编译自动生成工具,若没有安装exui也能使用
作者: renhe2018    时间: 2025-4-11 00:07
这个太厉害了,支持。
作者: 剧终0616    时间: 2025-4-11 00:39
EXUI我不清楚,但是原生组件,这么多年,一直多线程使用也不会出问题,比如超级列表框都不需要加锁多线程,,也从来没用过反馈事件,从来都不崩溃。。非超级列表框,一般就写入加许可证。。。所以windows组件在线程中,是无法安全调用与访问的,这个你有没有 例子来展示会出错。参考参考
作者: xiaole283    时间: 2025-4-11 03:35
剧终0616 发表于 2025-4-11 00:39
EXUI我不清楚,但是原生组件,这么多年,一直多线程使用也不会出问题,比如超级列表框都不需要加锁多线程, ...

许可解决不了组件在线程中的安全问题.

在 Windows 中,组件不能在线程中直接调用访问主要有以下原因:
线程安全问题:Windows 组件通常不是线程安全的。多个线程同时访问同一个组件可能导致数据不一致、资源竞争等问题。例如,多个线程同时对一个共享的文件进行写入操作,可能会破坏文件的内容。为了保证数据的完整性和一致性,需要对组件的访问进行同步控制,而直接在线程中调用无法保证这种同步。
消息机制和上下文问题:Windows 组件依赖于消息循环和特定的上下文环境来正常工作。线程有自己独立的执行路径和上下文,直接在线程中调用组件可能会导致组件无法正确接收和处理消息,因为它可能不在预期的消息循环环境中。例如,一个基于 Windows 窗体的组件需要在主线程的消息循环中处理用户界面相关的消息,如鼠标点击、键盘输入等。如果在其他线程中直接调用该组件,这些消息可能无法被正确处理,导致组件行为异常。
资源分配和管理问题:组件的初始化和资源分配通常是在特定的线程环境中进行的。在线程中直接调用组件可能会导致资源分配不正确或无法正确释放。例如,某些组件可能在创建时需要分配特定的系统资源,如窗口句柄、设备上下文等。如果在不合适的线程中创建和使用这些组件,可能会导致资源泄漏或系统不稳定
作者: pshq123    时间: 2025-4-11 05:43
感谢分享
作者: kmskik    时间: 2025-4-11 06:32
感谢分享谢谢
作者: 豆豆灰常开心    时间: 2025-4-11 07:14
感谢分享,很给力!~
作者: 查过    时间: 2025-4-11 07:19
感谢您对论坛的支持!
作者: year1970    时间: 2025-4-11 07:57
感谢分享
作者: 胖子葛格    时间: 2025-4-11 08:35
感谢大神分享~!
作者: 小虎来了    时间: 2025-4-11 08:38
感谢分享,很给力!~
作者: 沐白    时间: 2025-4-11 09:16
支持开源~!感谢分享
作者: 剧终0616    时间: 2025-4-11 12:02
xiaole283 发表于 2025-4-11 03:35
许可解决不了组件在线程中的安全问题.

在 Windows 中,组件不能在线程中直接调用访问主要有以下原因:

对,你说的可能都有道理,但是事实上我这么多年从来都没有崩溃过,所以实践是不是比理论来得实在,所以我才说原生组件多线程会崩溃的代码你有没有,参考参考是怎么回事。。
作者: xiaole283    时间: 2025-4-11 13:53
剧终0616 发表于 2025-4-11 12:02
对,你说的可能都有道理,但是事实上我这么多年从来都没有崩溃过,所以实践是不是比理论来得实在,所以我 ...

常识题没有必要争论。
作者: pipicool    时间: 2025-4-11 14:43
学习一下
作者: kenan236    时间: 2025-4-12 01:31
66666666666666666666666666
作者: 豆豆灰常开心    时间: 2025-4-12 07:11
全都是大佬~
作者: 查过    时间: 2025-4-12 07:15
下个学习一下
作者: gaoqing    时间: 2025-4-12 08:13
谢谢分享
作者: 用LOvE寫歌    时间: 2025-4-12 19:39

谢谢分享
作者: 非农    时间: 2025-4-12 22:41


谢谢分享
作者: moosoo    时间: 2025-4-13 20:11
没币了。。。
作者: moosoo    时间: 2025-4-13 20:15
5.9.3用不了。。。

B4269263-728A-4B57-A72C-345B5D1FCE94.png (16.99 KB, 下载次数: 4)

B4269263-728A-4B57-A72C-345B5D1FCE94.png

作者: xiaole283    时间: 2025-4-14 02:28
moosoo 发表于 2025-4-13 20:15
5.9.3用不了。。。

是不是回错地方了.我的支持库不是这个呀
作者: moosoo    时间: 2025-4-15 09:41
xiaole283 发表于 2025-4-14 02:28
是不是回错地方了.我的支持库不是这个呀

没有回错啊,是这程序报的错。

DF34A1FC-1B46-459B-8B3D-AED86C992BC4.png (10.55 KB, 下载次数: 2)

DF34A1FC-1B46-459B-8B3D-AED86C992BC4.png

作者: xiaole283    时间: 2025-4-16 00:31
moosoo 发表于 2025-4-15 09:41
没有回错啊,是这程序报的错。

加我qq289815204




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