为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 网络相关源码 正文

多线程进度下载文件源码,鱼刺模块队列和信号量的运用

三叶资源网 2019-06-09 12:44:07 网络相关源码 1863 ℃ 2 评论

多线程进度下载文件源码,鱼刺模块队列和信号量的运用

@闯荡

.版本 2
.支持库 spec

.程序集 _下载
.程序集变量 fileHandle, 整数型
.程序集变量 fileSize, 长整数型
.程序集变量 unit, 长整数型
.程序集变量 queue, 鱼刺类_队列
.程序集变量 FileUrl, 文本型
.程序集变量 lic, 鱼刺类_临界许可
.程序集变量 ok, 长整数型
.程序集变量 callBack, 子程序指针

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

unit = 512 × 1024

.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

.如果真 (fileHandle > 0)
    关闭文件 (fileHandle)
.如果真结束


.子程序 初始配置, 逻辑型, 公开
.参数 url, 文本型
.参数 filepath, 文本型
.参数 back, 子程序指针, 可空
.局部变量 http, WinHttp_中文版
.局部变量 resHeader, 文本型
.局部变量 bool, 逻辑型

http.打开 (“GET”, url, )
http.设置协议头 (“Range”, “bytes=0-1/”)
http.发送 ()
resHeader = http.取所有协议头 ()
resHeader = 高级截取文本 (resHeader, “bytes 0-1/”, #换行符, , , , , )
fileSize = 到长整数 (resHeader)
.如果真 (fileSize ≤ 0)
    返回 (假)
.如果真结束
bool = 写到文件 (filepath, 取空白字节集 (fileSize))
.如果真 (取反 (bool))
    返回 (假)
.如果真结束
fileHandle = 打开文件 (filepath, , )
.如果真 (fileHandle = 0)
    返回 (假)
.如果真结束
分割 ()
FileUrl = url
callBack = back
调试输出 (fileSize, unit, fileHandle)
返回 (真)

.子程序 分割
.局部变量 i, 整数型
.局部变量 count, 整数型

queue.清空 ()
count = fileSize \ unit
.计次循环首 (count, i)
    queue.压入文本 (到文本 ((i - 1) × unit) + “-” + 到文本 (i × unit - 1), )
.计次循环尾 ()
queue.压入文本 (到文本 ((i - 1) × unit) + “-” + 到文本 (fileSize), )

.子程序 下载, , 公开
.局部变量 temp, 文本型
.局部变量 start, 长整数型
.局部变量 end, 长整数型
.局部变量 bin, 字节集
.局部变量 http, WinHttp_中文版
.局部变量 bool, 逻辑型
.局部变量 size, 长整数型

.如果真 (queue.取队列长度 () = 0)
    返回 ()
.如果真结束
queue.弹出文本 (temp)  ' 0-499
start = 到长整数 (取左边文本 (temp, “-”))
end = 到长整数 (取右边文本 (temp, “-”))
http.打开 (“GET”, FileUrl, )
http.设置协议头 (“Range”, “bytes=” + temp)
http.发送 ()
bin = http.取返回字节集 ()
size = 取字节集长度 (bin)
.如果真 (size ≠ unit 且 size ≠ end - start)
    queue.压入文本 (temp, )
    返回 ()
.如果真结束

lic.进入 ()
bool = 移动读写位置 (fileHandle, #文件首, start)
.如果真 (取反 (bool))
    调试输出 (“移动读写位置失败”)
    lic.退出 ()
    返回 ()
.如果真结束
bool = 写出字节集 (fileHandle, bin)
.如果真 (取反 (bool))
    调试输出 (“写出字节集失败”)
    lic.退出 ()
    返回 ()
.如果真结束
lic.退出 ()

原子_运算 (ok, size)

.如果真 (到整数 (callBack) > 0)
    调用子程序 (callBack, , , ok, fileSize)
.如果真结束

' 调试输出 (size, ok, fileSize)
.如果真 (ok = fileSize)
    关闭文件 (fileHandle)
    fileHandle = 0

.如果真结束


.子程序 取状态, 逻辑型, 公开

返回 (fileHandle = 0)
文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有2位网友发表了看法:

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
模拟器中控聊呗贴吧引流书法易语言源码网动画源码工厂模式telegram模拟器群控类源码战旗弹幕捆绑程序DLL劫持源码群空间图片相似度识别socks4SqlServer亦表格反爆破JSON解析COM对象组件COM
最新评论