开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 9441|回复: 45
收起左侧

[易语言纯源码] 多线程HTTP下载高速案例附源码

[复制链接]
结帖率:0% (0/4)
发表于 2016-6-1 06:43:42 | 显示全部楼层 |阅读模式   四川省成都市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 挽来的枫 于 2016-6-1 06:44 编辑
  
子程序名返回值类型公开备 注
Callaaaaaaaaaaaaaaaaaaaaaaaaaa整数型 
参数名类 型参考可空数组备 注
参数_地址整数型
参数_一整数型
参数_二整数型
参数_三整数型
参数_四整数型
置入代码 ({ 201, 88, 135, 4, 36, 255, 224 })
返回 (0)
子程序名返回值类型公开备 注
HTTP下载处理_1  
参数名类 型参考可空数组备 注
参数_信息指针整数型
变量名类 型静态数组备 注
变量_回调函数地址整数型 
变量_文件句柄整数型 
变量_映射句柄整数型 
变量_堆整数型 
变量_许可证整数型 
变量_线程数整数型 
变量_总次数整数型 
变量_文件大小整数型 
变量_当前次数整数型 
变量_当前线程数整数型 
变量_任务状态整数型 
变量_进程句柄整数型 
变量_传递完毕整数型 
变量_完成大小整数型 
变量_超列数值整数型 
' 下载地址指针,回调函数地址+4,文件句柄+8,映射句柄+12,堆+16,许可证指针+20,线程数+24,当前线程数+28,任务状态+32,块+36,当前次数+40,总次数+44,完成大小+48,文件大小+52,传递完毕+56
RtlMoveMemory_读整数 (变量_回调函数地址, 参数_信息指针 + 4, 4)
RtlMoveMemory_读整数 (变量_文件句柄, 参数_信息指针 + 8, 4)
RtlMoveMemory_读整数 (变量_映射句柄, 参数_信息指针 + 12, 4)
RtlMoveMemory_读整数 (变量_堆, 参数_信息指针 + 16, 4)
RtlMoveMemory_读整数 (变量_许可证, 参数_信息指针 + 20, 4)
RtlMoveMemory_读整数 (变量_线程数, 参数_信息指针 + 24, 4)
RtlMoveMemory_读整数 (变量_总次数, 参数_信息指针 + 44, 4)
RtlMoveMemory_读整数 (变量_文件大小, 参数_信息指针 + 52, 4)
RtlMoveMemory_读整数 (变量_超列数值, 参数_信息指针 + 56, 4)
变量_当前次数 = 0
判断循环首 (变量_当前次数 < 变量_总次数)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
LeaveCriticalSection (变量_许可证)
如果真 (变量_当前线程数 < 变量_线程数)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_任务状态, 参数_信息指针 + 32, 4)
LeaveCriticalSection (变量_许可证)
如果真 (变量_任务状态 = -1 变量_任务状态 = 1)
跳出循环 ()

如果真 (变量_任务状态 = 2)
WaitForSingleObject (-1, 100)
到循环尾 ()

变量_当前次数 = 变量_当前次数 + 1
RtlMoveMemory_写整数 (参数_信息指针 + 40, 变量_当前次数, 4)
变量_进程句柄 = CreateThread (0, 0, &HTTP下载处理_2, 参数_信息指针, 0, 0)
如果真 (变量_进程句柄 = 0)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
LeaveCriticalSection (变量_许可证)
跳出循环 ()
CloseHandle (变量_进程句柄)
循环判断首 ()
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_传递完毕, 参数_信息指针 + 60, 4)
LeaveCriticalSection (变量_许可证)
WaitForSingleObject (-1, 100)
循环判断尾 (变量_传递完毕 = 0)

WaitForSingleObject (-1, 100)
判断循环尾 ()
循环判断首 ()
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
LeaveCriticalSection (变量_许可证)
WaitForSingleObject (-1, 100)
循环判断尾 (变量_当前线程数 ≠ 0)
RtlMoveMemory_读整数 (变量_任务状态, 参数_信息指针 + 32, 4)
判断 (变量_任务状态 = -1)
' Callaaaaaaaaaaaaaaaaaaaaaaaaaa (变量_回调函数地址, -1, 0, 0, -1)
调用子程序 (变量_回调函数地址, , , -1, 0, 0, -1)

判断 (变量_任务状态 = 0)
RtlMoveMemory_读整数 (变量_完成大小, 参数_信息指针 + 48, 4)
' Callaaaaaaaaaaaaaaaaaaaaaaaaaa (变量_回调函数地址, 0, 变量_文件大小, 变量_完成大小, 变量_超列数值)
调用子程序 (变量_回调函数地址, , , 0, 变量_文件大小, 变量_完成大小, 变量_超列数值)



DeleteCriticalSection (变量_许可证)
HeapDestroy (变量_堆)
CloseHandle (变量_映射句柄)
CloseHandle (变量_文件句柄)
子程序名返回值类型公开备 注
HTTP下载处理_2  
参数名类 型参考可空数组备 注
参数_信息指针整数型
变量名类 型静态数组备 注
变量_下载地址指针整数型 
变量_回调函数地址整数型 
变量_映射句柄整数型 
变量_许可证整数型 
变量_堆整数型 
变量_当前线程数整数型 
变量_块_1整数型 
变量_当前次数整数型 
变量_总次数整数型 
变量_文件大小整数型 
变量_dwFlags整数型 
变量_hOpen整数型 
变量_szHead文本型 
变量_开始整数型 
变量_结尾整数型 
变量_hConnect整数型 
变量_块_2整数型 
变量_http块整数型 
变量_当前大小整数型 
变量_szTemp整数型 
变量_dwSize整数型 
变量_写入位置整数型 
变量_块位置整数型 
变量_视图句柄整数型 
变量_完成大小整数型 
变量_任务状态整数型 
变量_超列数值整数型 
' 下载地址指针,回调函数地址+4,文件句柄+8,映射句柄+12,堆+16,许可证指针+20,线程数+24,当前线程数+28,任务状态+32,块+36,当前次数+40,总次数+44,完成大小+48,文件大小+52,传递完毕+56
RtlMoveMemory_读整数 (变量_下载地址指针, 参数_信息指针, 4)
RtlMoveMemory_读整数 (变量_回调函数地址, 参数_信息指针 + 4, 4)
RtlMoveMemory_读整数 (变量_映射句柄, 参数_信息指针 + 12, 4)
RtlMoveMemory_读整数 (变量_堆, 参数_信息指针 + 16, 4)
RtlMoveMemory_读整数 (变量_许可证, 参数_信息指针 + 20, 4)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_读整数 (变量_块_1, 参数_信息指针 + 36, 4)
RtlMoveMemory_读整数 (变量_当前次数, 参数_信息指针 + 40, 4)
RtlMoveMemory_读整数 (变量_文件大小, 参数_信息指针 + 52, 4)
RtlMoveMemory_读整数 (变量_超列数值, 参数_信息指针 + 56, 4)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 28, 变量_当前线程数 + 1, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 60, 1, 4)
LeaveCriticalSection (变量_许可证)
InternetGetConnectedState (变量_dwFlags, 0)
如果 (位与 (变量_dwFlags, 4) = 0)
变量_hOpen = InternetOpen (字符 (0), 4, 0, 0, 0)
变量_hOpen = InternetOpen (字符 (0), 0, 0, 0, 0)
如果真 (变量_hOpen = 0)
' Internet连接错误
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 28, 变量_当前线程数 - 1, 4)
LeaveCriticalSection (变量_许可证)
返回 ()

如果 (变量_当前次数 = 变量_总次数)
变量_开始 = 变量_块_1 (变量_当前次数 - 1)
变量_结尾 = 变量_文件大小
变量_开始 = 变量_块_1 (变量_当前次数 - 1)
变量_结尾 = 变量_块_1 × 变量_当前次数 - 1
变量_szHead = “Accept: */*”#换行符“Accept-Language: zh-cn”#换行符“Accept-Encoding: gzip, deflate”#换行符“User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)”
变量_szHead = 变量_szHead + #换行符“Range:bytes=”到文本 (变量_开始)“-”到文本 (变量_结尾)
变量_hConnect = InternetOpenUrl (变量_hOpen, 指针到文本 (变量_下载地址指针), 变量_szHead, 取文本长度 (变量_szHead), 2214592768, 0)
如果真 (变量_hConnect = 0)
' 不能打开该URL!
InternetCloseHandle (变量_hOpen)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 28, 变量_当前线程数 - 1, 4)
LeaveCriticalSection (变量_许可证)
返回 ()

变量_块_2 = 65536
变量_http块 = 20480
变量_当前大小 = 0
变量_szTemp = HeapAlloc (变量_堆, 8, 变量_http块)
如果真 (变量_szTemp = 0)
InternetCloseHandle (变量_hConnect)
InternetCloseHandle (变量_hOpen)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 28, 变量_当前线程数 - 1, 4)
LeaveCriticalSection (变量_许可证)
返回 ()

循环判断首 ()
如果真 (InternetReadFile (变量_hConnect, 变量_szTemp, 变量_http块, 变量_dwSize) = 0)
' 读文件失败
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
LeaveCriticalSection (变量_许可证)
跳出循环 ()

如果真 (变量_dwSize = 0)
跳出循环 ()

变量_写入位置 = 变量_开始 + 变量_当前大小
变量_块位置 = 变量_写入位置 ÷ 变量_块_2
变量_块位置 = 变量_块位置 × 变量_块_2
变量_视图句柄 = 映射装载 (变量_映射句柄, 2, 0, 变量_块位置, 变量_写入位置 - 变量_块位置 + 变量_dwSize)
如果真 (变量_视图句柄 = 0)
' 映射装载失败
EnterCriticalSection (变量_许可证)
RtlMoveMemory_写整数 (参数_信息指针 + 32, -1, 4)
LeaveCriticalSection (变量_许可证)
跳出循环 ()

写入映射 (变量_视图句柄 + 变量_写入位置 - 变量_块位置, 变量_szTemp, 变量_dwSize)
映射卸载 (变量_视图句柄)
变量_当前大小 = 变量_当前大小 + 变量_dwSize
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_完成大小, 参数_信息指针 + 48, 4)
变量_完成大小 = 变量_完成大小 + 变量_dwSize
RtlMoveMemory_写整数 (参数_信息指针 + 48, 变量_完成大小, 4)
' Callaaaaaaaaaaaaaaaaaaaaaaaaaa (变量_回调函数地址, 1, 变量_文件大小, 变量_完成大小, 变量_超列数值)
调用子程序 (变量_回调函数地址, , , 1, 变量_文件大小, 变量_完成大小, 变量_超列数值)
RtlMoveMemory_读整数 (变量_任务状态, 参数_信息指针 + 32, 4)
LeaveCriticalSection (变量_许可证)
判断循环首 (变量_任务状态 = 2)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_任务状态, 参数_信息指针 + 32, 4)
LeaveCriticalSection (变量_许可证)
如果真 (变量_任务状态 = -1 变量_任务状态 = 1)
跳出循环 ()
WaitForSingleObject (-1, 100)
判断循环尾 ()
循环判断尾 (变量_任务状态 ≠ -1 变量_任务状态 ≠ 1)
HeapFree (变量_堆, 0, 变量_szTemp)
InternetCloseHandle (变量_hConnect)
InternetCloseHandle (变量_hOpen)
EnterCriticalSection (变量_许可证)
RtlMoveMemory_读整数 (变量_当前线程数, 参数_信息指针 + 28, 4)
RtlMoveMemory_写整数 (参数_信息指针 + 28, 变量_当前线程数 - 1, 4)
LeaveCriticalSection (变量_许可证)
子程序名返回值类型公开备 注
多线程_HTTP下载_开始整数型 -1失败,0文件大小为0,>0句柄
参数名类 型参考可空数组备 注
参数_下载地址文本型
参数_保存路径文本型
参数_线程数整数型
参数_回调函数地址整数型
参数_超列数值整数型
变量名类 型静态数组备 注
变量_dwFlags整数型 
变量_hOpen整数型 
变量_szHead文本型 
变量_hConnect整数型 
变量_dwByteToRead整数型 
变量_dwSizeOfRq整数型 
变量_文件句柄整数型 
变量_映射句柄整数型 
变量_块整数型 
变量_次数整数型 
变量_hHeap整数型 
变量_msg整数型 
变量_地址整数型 
变量_许可证整数型 
变量_当前线程数整数型 
变量_进程句柄整数型 
变量_超列数值  
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 取文件大小
变量_超列数值 = 参数_超列数值
InternetGetConnectedState (变量_dwFlags, 0)
如果 (位与 (变量_dwFlags, 4) = 0)
变量_hOpen = InternetOpen (字符 (0), 4, 0, 0, 0)
变量_hOpen = InternetOpen (字符 (0), 0, 0, 0, 0)
如果真 (变量_hOpen = 0)
' Internet连接错误
返回 (-1)

变量_szHead = “Accept: */*”#换行符“Accept-Language: zh-cn”#换行符“Accept-Encoding: gzip, deflate”#换行符“User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)”
变量_hConnect = InternetOpenUrl (变量_hOpen, 参数_下载地址, 变量_szHead, 取文本长度 (变量_szHead), 2214592768, 0)
如果真 (变量_hConnect = 0)
' 不能打开该URL!
InternetCloseHandle (变量_hOpen)
返回 (-1)

变量_dwByteToRead = 0
变量_dwSizeOfRq = 4
如果真 (HttpQueryInfo (变量_hConnect, 536870917, 变量_dwByteToRead, 变量_dwSizeOfRq, 0) = 0)
变量_dwByteToRead = 0

InternetCloseHandle (变量_hConnect)
InternetCloseHandle (变量_hOpen)
' ''''''''



i支持库列表   支持库注释   
spec特殊功能支持库
多线程http下载_2.rar (8.06 KB, 下载次数: 513)

评分

参与人数 1精币 +4 收起 理由
村雨 + 4 欢迎常来帮助新人,谢谢。

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 10 天

发表于 2022-6-7 07:15:26 | 显示全部楼层   山东省潍坊市
别适合新手 ,就算你是高手,我想不也不愿意自己去弄一个
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

发表于 2022-1-3 23:03:12 | 显示全部楼层   四川省凉山彝族自治州
这个到底行不行嘛
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

发表于 2022-1-3 23:02:52 | 显示全部楼层   四川省凉山彝族自治州
用了无数个下载模块,都及其不稳定
回复 支持 反对

使用道具 举报

结帖率:63% (10/16)

签到天数: 8 天

发表于 2021-12-10 02:00:35 | 显示全部楼层   湖南省岳阳市
winhttp的方式有嘛?
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)

签到天数: 9 天

发表于 2021-8-2 16:12:09 | 显示全部楼层   云南省西双版纳傣族自治州
66666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2020-9-12 10:55:15 | 显示全部楼层   江苏省南京市
    支持    支持    支持    支持    支持
回复 支持 反对

使用道具 举报

发表于 2020-9-3 09:47:37 | 显示全部楼层   河北省保定市
        支持,膜拜了~
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2019-8-8 11:07:47 | 显示全部楼层   北京市北京市
66666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2019-4-26 16:12:24 | 显示全部楼层   北京市北京市
666666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:82% (49/60)
发表于 2019-2-20 15:16:26 | 显示全部楼层   广西壮族自治区玉林市
下载学习一下
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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