开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 224|回复: 5
收起左侧

[已解决] http下载谁能给修复以下点停止下载软件闪退

 关闭 [复制链接]
结帖率:80% (37/46)
发表于 昨天 16:14 | 显示全部楼层 |阅读模式   山东省烟台市
9精币
HTTP进度下载例子.e (30.22 KB, 下载次数: 5)

最佳答案

查看完整内容

改好了,暂停、恢复、结束

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

签到天数: 11 天

发表于 昨天 16:14 | 显示全部楼层   上海市上海市
改好了,暂停、恢复、结束

HTTP进度下载例子.e

31.79 KB, 下载次数: 6

回复

使用道具 举报

签到天数: 13 天

发表于 昨天 16:15 | 显示全部楼层   山西省运城市
停止闪退通常是线程或组件释放顺序问题。下载线程还在运行,你直接销毁窗口或强制结束线程会导致内存访问冲突。

改法:  
1. 定义一个程序集或全局逻辑变量 是否停止,初始假。  
2. 停止按钮按下时,把 是否停止 设为真。  
3. 下载循环中每轮检查这个变量,真则跳出循环、清理资源。  
4. 最后线程自然结束,再关闭窗口。

简单示例(关键部分):

```e
.版本 2
.程序集 窗口程序集_启动窗口
.全局变量 是否停止, 逻辑型

.子程序 _按钮_停止_被单击
是否停止 = 真

.子程序 _按钮_下载_被单击
.局部变量 局_线程句柄, 整数型
是否停止 = 假
局_线程句柄 = 线程_启动 (&下载线程)

.子程序 下载线程
.局部变量 局_数据, 字节集
.局部变量 局_循环, 整数型
.局部变量 局_文件号, 整数型

局_文件号 = 打开文件 (“c:\1.zip”, #重写, )
如果真 (局_文件号 = 0) 返回

循环判断首 ()
    局_数据 = HTTP读文件 (“http://...”, , , , , , , )
    如果真 (取字节集长度 (局_数据) = 0) 跳出循环
    写出字节集 (局_文件号, 局_数据)
    处理事件 ()
    如果真 (是否停止) 跳出循环
循环判断尾 (假)

关闭文件 (局_文件号)
是否停止 = 假
信息框 (“下载结束”, 0, )
```

注意:不能直接用 强制结束线程 或 销毁窗口。  
把停止按钮代码只写 是否停止 = 真,然后线程自然退出即可。
回复

使用道具 举报

签到天数: 13 天

发表于 昨天 16:15 | 显示全部楼层   山西省运城市
问题:停止时线程未安全退出,直接销毁窗口或强制结束线程导致资源冲突。

简单修复:下载循环中加判断停止标志,停止按钮置标志并等待线程自然结束。

代码参考(在下载子程序循环内加):

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口
.局部变量 停止标志, 逻辑型
.局部变量 线程句柄, 整数型

.子程序 _按钮停止_被单击
停止标志 = 真
.如果真 (线程句柄 ≠ 0)
    等待线程 (线程句柄, -1)  ' 等待线程结束
    关闭线程句柄 (线程句柄)
    线程句柄 = 0
.如果真结束

.子程序 下载函数
    .局部变量 局_数据, 字节集
    .局部变量 局_状态, 整数型
    循环判断首 ()
        如果真 (停止标志)
            跳出循环
        局_状态 = 互联网.取数据 (局_数据, ...)  ' 你的下载代码
        处理事件 ()
        如果真 (局_状态 ≤ 0)
            跳出循环
    .判断循环尾 ()
    停止标志 = 假

另外停止时不要直接销毁窗口或结束进程,先置标志。如果下载用了控件,停止后确保恢复控件状态。
回复

使用道具 举报

签到天数: 13 天

发表于 昨天 16:16 | 显示全部楼层   山西省运城市
检查停止按钮事件里是不是强制销毁了下载线程。把线程强制结束会导致资源未释放,闪退。改用逻辑变量控制下载循环:

.版本 2
.程序集 窗口程序集_启动窗口
.全局变量 停止下载, 逻辑型

.子程序 _按钮_停止_被单击
停止下载 = 真

.子程序 下载线程
.局部变量 局部文件号, 整数型
.局部变量 局部字节集, 字节集
.局部变量 临时数据, 字节集
.局部变量 已下载, 整数型
.局部变量 总大小, 整数型

停止下载 = 假
总大小 = 网页_取网页长度 (“http://...”)
局部文件号 = 打开文件 (“C:\1.exe”, #重写, )
如果真 (局部文件号 = 0) 返回

循环判断首 ()
    如果真 (停止下载) 跳出循环
    临时数据 = 网页_断点续传 (“http://...”, 已下载, 1024)
    如果真 (取反 (临时数据 = “”))
        写出数据 (局部文件号, 临时数据)
        已下载 = 已下载 + 取字节集长度 (临时数据)
        标签1.标题 = “已下载:” + 到文本 (已下载) + “/” + 到文本 (总大小)
        处理事件 ()
    否则
        跳出循环
    如果真 (已下载 ≥ 总大小) 跳出循环
循环判断尾 (真)
关闭文件 (局部文件号)

注意:停止按钮只改变量,别销毁线程。修改后再试试。
回复

使用道具 举报

结帖率:90% (113/126)

签到天数: 14 天

发表于 昨天 16:54 | 显示全部楼层   广东省佛山市
自动更新在线下载模块 支持替换删除旧exe文件   热更
https://bbs.ijingyi.com/forum.php?mod=viewthread&tid=14877182
(出处: 精易论坛)
试试这个
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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