米老鼠和蓝精鼠v 发表于 2024-3-5 09:22:44

易语言标签反馈在多线程中的应用(解决多线程不稳定的问...


一直以来,都在为易语言的多线程不稳定发愁。
后来学习了其它多种语言,知道了所有原生程序开发工具中,都是使用了操作系统原生的API操作多线程。充其量是做了一点包装。
经过不断的学习研究,知道了以前多线程使用了一些问题所在:



1。 不要在线程中调用主线程UI控件(大忌!)
2。 不加处理在线程中监用共用性质的全局变量
3。不加处理在多个线程共用一个子程序(大忌!),这在多CPU环境下会出现代码重入的严重问题。
4。一些易语方的第三方模块,或者有部分易语言自身提供的模块,有些功能并不是线程安全的。时至今日,易语言官方也没有指出什么库与模块是线程安全的,更别说第三方的模块提供者。
5。粗暴的线程终止方式,大部分人使用错误,记住,终止线程的系统API也不是安全的。

本文所说的标签反馈事件可以完美的解决我所说的第一点,即多线程中信息输出到主线程界面控件的问题。
有时间我再指出其它问题的解决方案。

源代码:
.版本 2
.支持库 spec
.支持库 iext

.程序集 窗口程序集1
.程序集变量 工作线程句柄, 整数型

.子程序 _按钮1_被单击
.局部变量 id, 整数型
.局部变量 安全属性, SECURITY_ATTRIBUTES
工作线程句柄 = CreateThread (安全属性, 0, 到整数 (&工作线程), 0, 0, id)

.子程序 工作线程, 整数型
.局部变量 i, 整数型
.局部变量 地址, 整数型

.计次循环首 (1000, i)
地址 = 取变量地址 (i)
输出调试文本 (i)
SendMessage (_启动窗口.标签1.取窗口句柄 (), 32885, 地址, 0)
.计次循环尾 ()
返回 (88)

.子程序 _标签1_反馈事件, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型
.局部变量 j, 字节集
.局部变量 i, 整数型

j = 指针到字节集 (参数一, 4)
i = 取字节集数据 (j, #整数型, )
标签1.标题 = “信息:” + 到文本 (i)
状态条1.置文本 (0, “信息:” + 到文本 (i))
页: [1]
查看完整版本: 易语言标签反馈在多线程中的应用(解决多线程不稳定的问...