开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 211|回复: 7
收起左侧

[完成] 新人问题,循环卡死

 关闭 [复制链接]
结帖率:45% (5/11)
发表于 2026-1-8 00:07:11 | 显示全部楼层 |阅读模式   广东省深圳市
5精币
.版本 2
.支持库 spec

.子程序 _按钮1_被单击
.局部变量 a, 整数型

a = 1
.判断循环首 (a = 1)
    调试输出 (1)
    延时 (1000)
.判断循环尾 ()

为什么按钮点击事件,循环加不加延时,都会卡死,后面我把事件做成子程序,在按钮1里面 启动子程序 也会卡死,    在后面,我在按钮1里 加了线程运行就没卡死了,
.版本 2
.支持库 EThread
.支持库 spec

.子程序 _按钮1_被单击

启动线程 (&子程序1, , )

.子程序 子程序1
.局部变量 a, 整数型

a = 1
.判断循环首 (a = 1)
    调试输出 (1)
    延时 (1000)
.判断循环尾 ()



最佳答案

查看完整内容

UI线程只做UI操作:按钮点击、界面更新等 耗时操作放线程:循环、网络请求、文件读写、复杂计算等 线程间通讯:如果需要在子线程中更新UI,需要使用标签反馈事件或时钟组件中转 简单理解: 可以把UI线程想象成一个服务员,如果服务员一直在后厨做菜(执行死循环),就无法接待新客人(处理点击事件) 正确的做法是:服务员只负责接待,把做菜的任务交给后厨(新线程) 这就是为什么使用线程后就不卡死的原因! ...

签到天数: 3 天

发表于 2026-1-8 00:07:12 | 显示全部楼层   山东省烟台市
UI线程只做UI操作:按钮点击、界面更新等  耗时操作放线程:循环、网络请求、文件读写、复杂计算等  线程间通讯:如果需要在子线程中更新UI,需要使用标签反馈事件或时钟组件中转 简单理解: 可以把UI线程想象成一个服务员,如果服务员一直在后厨做菜(执行死循环),就无法接待新客人(处理点击事件)  正确的做法是:服务员只负责接待,把做菜的任务交给后厨(新线程)  这就是为什么使用线程后就不卡死的原因!

评分

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

查看全部评分

回复

使用道具 举报

结帖率:80% (12/15)

签到天数: 3 天

发表于 2026-1-8 00:20:25 | 显示全部楼层   湖北省武汉市
卡死就是卡ui,会导致界面卡死,你点击按钮1的时候,你的ui线程需要先处理你的死循环,如果加延迟只会放缓你的死循环,他依然存在,导致你的主线程法办法处理你的界面响应,所有你在按钮里面加启动子程序,相当于调用子程序,并不会影响他卡死主线程,但是你启动线程是另外开辟的多线程空间,不会影响你主线程的ui响应,所有不卡死,对于多线程目前有鱼刺等等线程模块,不建议直接使用易语言自带的启动子程序,另外程序里面用死循环很危险
回复

使用道具 举报

结帖率:100% (1/1)
发表于 2026-1-8 00:21:07 | 显示全部楼层   辽宁省辽阳市
使用“延迟”命令会好很多 或者“程序_延时”
回复

使用道具 举报

结帖率:100% (5/5)
发表于 2026-1-8 00:50:58 | 显示全部楼层   广西壮族自治区南宁市
判断循环首 无条件结束循环?  使用精易模块的程序_延时
回复

使用道具 举报

结帖率:45% (5/11)
 楼主| 发表于 2026-1-8 02:30:40 | 显示全部楼层   广东省深圳市
a1997426zz 发表于 2026-1-8 00:21
使用“延迟”命令会好很多 或者“程序_延时”

这个可以解决界面无法操作,但是关闭界面后,程序还继续运行,看样子  只能使用线程调用了
回复

使用道具 举报

结帖率:100% (11/11)

签到天数: 3 天

发表于 2026-1-8 09:07:47 | 显示全部楼层   广东省东莞市
你在循环里加个变量,如果变量>1,就暂停,处理循环任务,再让变量=0,接着执行循环就可以了,都不需要加线程和延时
回复

使用道具 举报

结帖率:98% (44/45)

签到天数: 4 天

发表于 2026-1-8 09:15:10 | 显示全部楼层   浙江省湖州市
按钮事件是在主线程(UI线程)中执行的。如果在按钮事件中写一个死循环,那么主线程就会一直在这个循环中运行,无法处理其他消息(包括界面刷新、用户操作等),因此界面就会卡死,无法响应。

当使用启动线程来运行这个死循环时,循环是在另一个线程中执行的,不会阻塞主线程,因此主线程可以继续处理消息,界面就不会卡死。
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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