|
|
发表于 2026-1-11 11:40:09
|
显示全部楼层
福建省宁德市
还有一个问题是,你的 子程序3 不能直接返回文本型,因为此时 &子程序3 的时候,易语言就把他当做DLL声明一样的处理了
也就是说返回文本型时本质上是将文本型的指针存储到了一个你看不见的全局变量中
易语言自身并没有做好这部分的线程安全考虑,所以会崩溃,你需要自己手动解决这个问题,比如:
或者用稍微粗糙一点的方式:
| 窗口程序集名 | 保 留 | 保 留 | 备 注 | | 程序集1 | | | | | 变量名 | 类 型 | 数组 | 备 注 | | 集_指针管理 | 数据类型1 | 0 | | 集_锁 | 鱼刺类_临界许可 | | 子程序1 ()返回 (0 ) 循环判断首 () 延时 (10 ) 循环判断尾 (子程序2 ()) | 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 线程池 | 鱼刺类_线程池 | | | | x | 整数型 | | |
线程池. 创建 (30, , , ) 计次循环首 (30, x ) 线程池. 投递任务 (&子程序3, x, ) 计次循环尾 ()线程池. 销毁 (, )返回 (真)调试输出 (x )返回 (子程序_返回文本指针 (到文本 (x )) )| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | i | 整数型 | | | | id | 整数型 | | | | 返回值 | 整数型 | | |
id = 线程_取当前ID ()集_锁. 进入 () 计次循环首 (取数组成员数 (集_指针管理 ), i ) 如果真 (集_指针管理 [i ].线程ID = id )  集_指针管理 [i ].数据 = 到文本 (文本 )  返回值 = L_指针_取文本型指针 (集_指针管理 [i ].数据 ) 跳出循环 ()  计次循环尾 () 如果真 (返回值 = 0 ) i = 取数组成员数 (集_指针管理 ) i = i + 1 重定义数组 (集_指针管理, 真, i ) 集_指针管理 [i ].线程ID = id  集_指针管理 [i ].数据 = 到文本 (文本 ) 返回值 = L_指针_取文本型指针 (集_指针管理 [i ].数据 )集_锁.退出 ()返回 (返回值 )置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })返回 (1027663760 )
补充内容 (2026-1-11 11:42):
用数组的方式你需要再解决线程结束后的内存释放 |
|