开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 131|回复: 11
打印 上一主题 下一主题
收起左侧

[易语言] 子程序打开超级列表框加载17000多数据,然后关闭主程序会卡

[复制链接]
结帖率:50% (1/2)
跳转到指定楼层
楼主
发表于 昨天 23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   安徽省滁州市
10精币
子程序打开超级列表框1加载17000多数据,然后关闭主程序会卡5秒左右才能再次点按钮,有大佬怎么解决啊


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

签到天数: 15 天

沙发
发表于 昨天 23:24 | 只看该作者   安徽省铜陵市
这个问题的根本原因是:程序关闭时,主线程在等待加载数据的子线程结束,导致界面卡死。

17000条数据加载到超级列表框是一个耗时操作,如果你用子程序处理,但在关闭主程序时没有正确终止或处理这个子线程,就会出现以下情况:

子线程还在运行,主窗口关闭时等待它结束

超级列表框销毁时,有大量数据正在操作导致冲突

主线程被阻塞,等待子线程完成才能完全退出


方案一:正确使用线程

方案二:使用虚拟模式

方案三:分批加载 + 延迟关闭

方案四:使用数组缓冲
回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

板凳
发表于 昨天 23:24 | 只看该作者   广西壮族自治区南宁市
你这个是加载 卡5秒吧 将可视改为 假加载完再设置为真 我记得禁止重画好像也行
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 4 天

地板
 楼主| 发表于 昨天 23:25 | 只看该作者   安徽省滁州市
Marvin 发表于 2026-7-14 23:24
这个问题的根本原因是:程序关闭时,主线程在等待加载数据的子线程结束,导致界面卡死。

17000条数据加载 ...

17000数据已经加载完成了,关闭还会那样
回复

使用道具 举报

签到天数: 14 天

地下
发表于 昨天 23:26 | 只看该作者   山西省运城市
在_启动窗口_将被销毁事件下加一句:

超级列表框1.全部删除 ()

如果还卡,先设可视假再删:

超级列表框1.可视 = 假
超级列表框1.全部删除 ()
处理事件 ()   ' 让删除操作快速完成
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 4 天

6
 楼主| 发表于 昨天 23:26 | 只看该作者   安徽省滁州市
bysy 发表于 2026-7-14 23:24
你这个是加载 卡5秒吧 将可视改为 假加载完再设置为真 我记得禁止重画好像也行 ...

是数据全部加载出来了 没数据了 关闭的时候主程序会卡5秒
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 4 天

7
 楼主| 发表于 昨天 23:31 | 只看该作者   安徽省滁州市
a2083657 发表于 2026-7-14 23:26
在_启动窗口_将被销毁事件下加一句:

超级列表框1.全部删除 ()

主程序还是子程序里增加这个
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 4 天

8
 楼主| 发表于 昨天 23:37 | 只看该作者   安徽省滁州市
.版本 2
.支持库 iext
.支持库 mysql

.程序集 窗口程序集_玩家排行
.程序集变量 本次记录集句柄, 整数型
.程序集变量 窗口正在关闭, 逻辑型

.子程序 _按钮1_被单击
.局部变量 sql句柄, 整数型
.局部变量 sql, 文本型
.局部变量 rs, 整数型
.局部变量 取前名次, 整数型
.局部变量 总行, 整数型
.局部变量 i, 整数型
.局部变量 排名, 整数型
.局部变量 ori_owner, 文本型
.局部变量 curr_owner, 文本型
.局部变量 pet_name, 文本型
.局部变量 star_str, 文本型
.局部变量 整数部分, 文本型
.局部变量 小数部分, 文本型
.局部变量 show_star, 文本型
.局部变量 type_str, 文本型
.局部变量 行索引, 整数型

sql句柄 = _启动窗口.全局数据库句柄
.如果真 (sql句柄 = 0)
    信息框 (“数据库未连接”, 0, “提示”, )
    返回 ()
.如果真结束

' 获取编辑框输入的名次数量,容错判断
取前名次 = 到整数 (编辑框1.内容)
.如果真 (取前名次 ≤ 0)
    信息框 (“请输入大于0的数字,例如500”, 0, “输入错误”, )
    返回 ()
.如果真结束

超级列表框1.全部删除 ()
排名 = 1
窗口正在关闭 = 假

' 先按星级降序排序,再截取前N名 = 星级最高前N名幻兽
sql = “SELECT e.ori_owner_name,e.name,e.star_lev,e.item_type,u.name FROM cq_eudemon e LEFT JOIN cq_user u ON e.owner_id = u.id ORDER BY e.star_lev DESC LIMIT 0,” + 到文本 (取前名次)
执行SQL语句 (sql句柄, sql)
rs = 取记录集 (sql句柄)
本次记录集句柄 = rs
总行 = 取记录集行数 (rs)

.如果真 (总行 = 0)
    释放记录集 (rs)
    本次记录集句柄 = 0
    信息框 (“暂无幻兽数据”, 0, “提示”, )
    返回 ()
.如果真结束

到首行 (rs)
.计次循环首 (总行, i)
    ' 关闭窗口中断循环
    .如果真 (窗口正在关闭 = 真)
        跳出循环 ()
    .如果真结束
    处理事件 ()

    读字段值 (rs, “ori_owner_name”, ori_owner)
    读字段值 (rs, “name”, pet_name)
    读字段值 (rs, “u.name”, curr_owner)
    读字段值 (rs, “star_lev”, star_str)
    读字段值 (rs, “item_type”, type_str)

    ' 星级格式化逻辑完全保留你原来的
    .如果真 (取文本长度 (star_str) ≤ 2)
        整数部分 = “0”
        小数部分 = star_str
    .如果真结束
    .如果真 (取文本长度 (star_str) > 2)
        整数部分 = 取文本左边 (star_str, 取文本长度 (star_str) - 2)
        小数部分 = 取文本右边 (star_str, 2)
    .如果真结束

    .如果真 (小数部分 = “00”)
        show_star = 整数部分
    .如果真结束
    .如果真 (小数部分 ≠ “00”)
        show_star = 整数部分 + “.” + 小数部分
    .如果真结束

    行索引 = 超级列表框1.插入表项 (, 到文本 (排名), , , , )
    超级列表框1.置标题 (行索引, 1, curr_owner)
    超级列表框1.置标题 (行索引, 2, ori_owner)
    超级列表框1.置标题 (行索引, 3, pet_name)
    超级列表框1.置标题 (行索引, 4, show_star)
    超级列表框1.置标题 (行索引, 5, type_str)

    排名 = 排名 + 1
    到下一行 (rs)
.计次循环尾 ()

' 释放数据库资源
.如果真 (本次记录集句柄 ≠ 0)
    释放记录集 (本次记录集句柄)
    本次记录集句柄 = 0
.如果真结束

.如果真 (窗口正在关闭 = 假)
    信息框 (“加载完成,共加载星级前” + 到文本 (取前名次) + “名,实际共” + 到文本 (总行) + “条”, 0, “完成”, )
.如果真结束


.子程序 _窗口_将被销毁

窗口正在关闭 = 真
' 仅释放数据库,删除列表那行删掉,解决关闭卡顿
.如果真 (本次记录集句柄 ≠ 0)
    释放记录集 (本次记录集句柄)
    本次记录集句柄 = 0
    超级列表框1.全部删除 ()
    处理事件 ()
.如果真结束


.子程序 _玩家排行_创建完毕

超级列表框1.全部删除 ()

.子程序 _玩家排行_将被销毁

超级列表框1.全部删除 ()
超级列表框1.可视 = 假
处理事件 ()
回复

使用道具 举报

结帖率:80% (4/5)

签到天数: 9 天

9
发表于 昨天 23:39 | 只看该作者   江苏省苏州市
_启动窗口  关闭事件添加,如果还是不行,只能进行数据优化了!
回复

使用道具 举报

结帖率:100% (11/11)

签到天数: 15 天

10
发表于 5 小时前 | 只看该作者   安徽省铜陵市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
初始化随机数种子 ()
子程序名返回值类型公开备 注
_按钮_加载_被单击  
启动线程 (&加载超级列表框, , )
子程序名返回值类型公开备 注
加载超级列表框  
变量名类 型静态数组备 注
i整数型 
索引整数型 
超级列表框1.可视 = 假
超级列表框1.禁止重画 ()
超级列表框1.全部删除 ()
计次循环首 (17000, i)
索引 = 超级列表框1.插入表项 (, , , , , )
超级列表框1.置标题 (索引, 0, 到文本 (i))
超级列表框1.置标题 (索引, 1, 到文本 (取随机数 (1, 10000)))
计次循环尾 ()
超级列表框1.允许重画 ()
超级列表框1.可视 = 真
调试输出 (“加载完成,共”到文本 (超级列表框1.取表项数 ()) + “条”)


i支持库列表   支持库注释   
EThread多线程支持库
iext扩展界面支持库一
spec特殊功能支持库

回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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