开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 367|回复: 8
收起左侧

[已解决] 为什么这个几秒就崩了啥提示没有

 关闭 [复制链接]
结帖率:83% (5/6)
发表于 2026-1-10 22:21:44 | 显示全部楼层 |阅读模式   美国
50精币
为什么这个代码几秒就崩了啥提示没有,用的鱼刺多线程模块,销毁方式31不崩


  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
子程序1 ()
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
子程序1  
循环判断首 ()
延时 (10)
循环判断尾 (子程序2 ())
子程序名返回值类型公开备 注
子程序2逻辑型 
变量名类 型静态数组备 注
线程池鱼刺类_线程池 
x整数型 
线程池.创建 (30)
计次循环首 (30, x)
线程池.投递任务 (&子程序3, x)
计次循环尾 ()
线程池.销毁 (1)
返回 ()
子程序名返回值类型公开备 注
子程序3文本型 
参数名类 型参考可空数组备 注
x整数型
调试输出 (x)
返回 (到文本 (x))


i支持库列表   支持库注释   
spec特殊功能支持库


最佳答案

查看完整内容

鱼刺的线程池销毁没做好,这个我以前做性能测试对比的时候就发现了,你得主动等待所有任务结束再销毁 补充内容 (2026-1-11 12:46): 8楼有详细解释 补充内容 (2026-1-11 12:46): https://bbs.ijingyi.com/forum.php?mod=redirect&goto=findpost&ptid=14870906&pid=30650497

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:83% (5/6)

签到天数: 4 天

 楼主| 发表于 2026-1-10 22:26:11 | 显示全部楼层   美国
  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
子程序1 ()
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
子程序1  
循环判断首 ()
延时 (10)
循环判断尾 (子程序2 ())
子程序名返回值类型公开备 注
子程序2逻辑型 
变量名类 型静态数组备 注
线程池鱼刺类_线程池 
x整数型 
线程池.创建 (30)
计次循环首 (30, x)
线程池.投递任务 (&子程序3, x)
计次循环尾 ()
线程池.销毁 (3)
返回 ()
子程序名返回值类型公开备 注
子程序3  
参数名类 型参考可空数组备 注
x整数型
调试输出 (x)
返回 ()
改不了 ,重新贴一下源码,销毁 (3)就崩


i支持库列表   支持库注释   
spec特殊功能支持库

回复

使用道具 举报

结帖率:89% (39/44)

签到天数: 18 天

发表于 2026-1-10 22:21:45 | 显示全部楼层   福建省宁德市
鱼刺的线程池销毁没做好,这个我以前做性能测试对比的时候就发现了,你得主动等待所有任务结束再销毁 1.png


补充内容 (2026-1-11 12:46):
8楼有详细解释

补充内容 (2026-1-11 12:46):
https://bbs.ijingyi.com/forum.ph ... 06&pid=30650497

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:100% (1/1)
发表于 2026-1-10 22:41:31 | 显示全部楼层   浙江省温州市
改成默认销毁方式,线程不要返回值,或者改成返回整数:
  
子程序名返回值类型公开备 注
子程序2逻辑型 
变量名类 型静态数组备 注
线程池鱼刺类_线程池 
x整数型 
线程池.创建 (30)
计次循环首 (30, x)
线程池.投递任务 (&子程序3, x)
计次循环尾 ()
线程池.销毁 ()
返回 ()
子程序名返回值类型公开备 注
子程序3整数型 
参数名类 型参考可空数组备 注
x整数型
调试输出 (x)
返回 (x)


i支持库列表   支持库注释   
spec特殊功能支持库

回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 5 天

发表于 2026-1-10 22:59:34 | 显示全部楼层   天津市天津市
  
你线程池是一个局部变量,31不崩盘应该是因为强制当前子程序阻塞卡住,所有直到线程都跑完并清理干净,才允许子程序2结束
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
全局_线程池鱼刺类_线程池  <--- 1. 移到这里,变成程序集变量  

子程序名返回值类型公开备 注
_启动子程序整数型 

' 这里创建一次即可
全局_线程池.创建 (30, , , , )

子程序1 ()


全局_线程池.销毁 ()
返回 (0)
子程序名返回值类型公开备 注
子程序1  

循环判断首 ()
子程序2 ()
延时 (5)
循环判断尾 ()
子程序名返回值类型公开备 注
子程序2逻辑型 
.局部变量 x, 整数型

计次循环首 (30, x)
' 优化:判断线程池是否繁忙,避免任务无限制堆积
如果真 (全局_线程池.取队列任务数 () > 1000)
延时 (500)

全局_线程池.投递任务 (&子程序3, x)
计次循环尾 ()
返回 ()
子程序名返回值类型公开备 注
子程序3文本型 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
x整数型
调试输出 (x)
返回 (到文本 (x))


i支持库列表   支持库注释   
spec特殊功能支持库

回复

使用道具 举报

签到天数: 18 天

发表于 7 天前 | 显示全部楼层   河南省焦作市
已修复,请采纳!
崩溃原因:
循环判断尾 (子程序2 ())  -> 无限调用子程序2 ()
子程序2()  ->  开辟线程池
如此就会无限开辟线程池,导致耗尽系统内核.

  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
子程序1 ()
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
子程序1  
线程池.创建 (30)
循环判断首 ()
延时 (10)
循环判断尾 (子程序2 ())线程池.销毁 (1)
子程序名返回值类型公开备 注
子程序2逻辑型 
变量名类 型静态数组备 注
线程池鱼刺类_线程池 
x整数型 
计次循环首 (30, x)
线程池.投递任务 (&子程序3, x)
计次循环尾 ()
返回 ()
子程序名返回值类型公开备 注
子程序3文本型 
参数名类 型参考可空数组备 注
x整数型
调试输出 (x)
返回 (到文本 (x))


i支持库列表   支持库注释   
spec特殊功能支持库




补充内容 (2026-1-11 00:55):
忘了将子程序2的变量线程池改为参数,而且子程序1增加变量线程池-类型:鱼刺类_线程池.
楼主自己修缮一下
回复

使用道具 举报

结帖率:83% (5/6)

签到天数: 4 天

 楼主| 发表于 7 天前 | 显示全部楼层   美国
zainex 发表于 2026-1-10 22:41
改成默认销毁方式,线程不要返回值,或者改成返回整数:
[e=1].版本 2
.支持库 spec

我知道0 1都没什么问题,我的是问的为什么会崩,请注意审题,是模块缺陷还是什么
回复

使用道具 举报

结帖率:83% (5/6)

签到天数: 4 天

 楼主| 发表于 7 天前 | 显示全部楼层   美国
大大大大大师 发表于 2026-1-11 00:52
已修复,请采纳!
崩溃原因:
循环判断尾 (子程序2 ())  -> 无限调用子程序2 ()

提示词:别改我代码结构
回复

使用道具 举报

结帖率:89% (39/44)

签到天数: 18 天

发表于 7 天前 | 显示全部楼层   福建省宁德市
还有一个问题是,你的 子程序3 不能直接返回文本型,因为此时 &子程序3 的时候,易语言就把他当做DLL声明一样的处理了
也就是说返回文本型时本质上是将文本型的指针存储到了一个你看不见的全局变量中

易语言自身并没有做好这部分的线程安全考虑,所以会崩溃,你需要自己手动解决这个问题,比如:

2.png

或者用稍微粗糙一点的方式:

3.png

  
数据类型名公开备 注
数据类型1 
成员名类 型传址数组备 注
线程ID整数型  
数据文本型  
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
集_指针管理数据类型10 
集_锁鱼刺类_临界许可  

子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
子程序1 ()
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
子程序1  
循环判断首 ()
延时 (10)
循环判断尾 (子程序2 ())
子程序名返回值类型公开备 注
子程序2逻辑型 
变量名类 型静态数组备 注
线程池鱼刺类_线程池 
x整数型 
线程池.创建 (30, , , )
计次循环首 (30, x)
线程池.投递任务 (&子程序3, 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].数据)
集_锁.退出 ()
返回 (返回值)
子程序名返回值类型公开备 注
L_指针_取文本型指针整数型 
参数名类 型参考可空数组备 注
文本型变量通用型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (1027663760)


i支持库列表   支持库注释   
spec特殊功能支持库



补充内容 (2026-1-11 11:42):
用数组的方式你需要再解决线程结束后的内存释放
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表