开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 329|回复: 9
收起左侧

[已解决] 多线程对比MD5

 关闭 [复制链接]
结帖率:100% (12/12)
发表于 2024-10-29 18:46:34 | 显示全部楼层 |阅读模式   广西壮族自治区玉林市
5精币
  一直搞不明白多线程,单线程计次循环是处理完一个再处理下一个,多线程我理解就是要处理100个东西分成2个线程就是一个线程处理50个,100个线程各处理一个,但是那个线程处理那个东西,那个线程处理的东西又怎么跟我需要对比的东西去对比,完全没搞懂。

我这个东西其实就是先取服务器多个文件MD5,然后再取本地的多个文件MD5,然后对比出不同MD5的

单线程处理太慢,想搞个多线程的,实在是搞不明白多线程

求写一个多线程列子,最好就是不用模块,简单容易看懂的,学习一下

谢谢各位大佬

测试.e (10.7 KB, 下载次数: 10)

最佳答案

查看完整内容

[e=2].版本 2 .支持库 EThread .支持库 dp1 .程序集 改多线程 .程序集变量 线程数, 整数型 .程序集变量 文件MD5, 文件信息, , "0" .子程序 读取文件列表 .局部变量 a, 文本型, , "0", 文件数组 .局部变量 i, 整数型 .局部变量 计时, 整数型 .局部变量 分割, 文本型, , "0" .局部变量 fmax, 整数型 计时 = 取启动时间 () ' //枚举目录 文件_枚举_升级版 (_启动窗口.目录路径.内容, “*”, a, 0, 真, 真) ' //得到文件数组 fmax ...

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

签到天数: 21 天

发表于 2024-10-29 18:46:35 | 显示全部楼层   广东省深圳市
  
窗口程序集名保 留  保 留备 注
改多线程   
变量名类 型数组备 注
线程数整数型  
文件MD5文件信息0 

子程序名返回值类型公开备 注
读取文件列表  
变量名类 型静态数组备 注
a文本型0文件数组
i整数型 
计时整数型 
分割文本型0
fmax整数型 
计时 = 取启动时间 ()
' //枚举目录
文件_枚举_升级版 (_启动窗口.目录路径.内容, “*”, a, 0, 真, )
' //得到文件数组
fmax = 取数组成员数 (a)
重定义数组 (文件MD5, 假, fmax)
' //把要处理的数据填充到 结构体内
计次循环首 (fmax, i)
' 调试输出 (i, a [i])
文件MD5 [i].ID = i
文件MD5 [i].file = a [i]
文件MD5 [i].md5 = “”
文件MD5 [i].flag = 0  ' //初始标识  未处理
计次循环尾 ()
计时 = 取启动时间 () - 计时
_启动窗口.操作记录.加入文本 ( #换行符“需要处理:”到文本 (fmax)“个文件。”#换行符 )
' //按设定 开启多线程处理  比如开启 20个线程 或者按 总数量 倍增 线程数
判断 (fmax ≤ 10)
线程数 = 10
判断 (fmax ≤ 50)
线程数 = 20
判断 (fmax ≤ 100)
线程数 = 40
判断 (fmax ≤ 1000)
线程数 = 100
' //超级多的话  就多开点
线程数 = 100
_启动窗口.操作记录.加入文本 ( #换行符“开启线程数:”到文本 (线程数)“个”#换行符 )
' //循环启动多线程
计次循环首 (线程数, i)
启动线程 (&读取文件MD5, i, )  ' 把 i 当成线程标识传进去 , 可有可无
延时 (100)  ' //随便加个延迟
计次循环尾 ()
' //
计次循环首 (fmax, i)
判断 (文件MD5 [fmax].flag = 0)  ' //判断最后一个文件是否处理完,
延时 (500)  ' // 等待全部处理完成



跳出循环 ()

计次循环尾 ()
_启动窗口.操作记录.加入文本 ( #换行符“处理完毕:”到文本 (fmax)“个文件。”#换行符 )
_启动窗口.操作记录.加入文本 ( #换行符“处理耗时:”到文本 (计时 ÷ 1000)“秒。”#换行符#换行符 )
_启动窗口.目录路径.内容 = “”
子程序名返回值类型公开备 注
读取文件MD5 读取文件MD5 的工作线程
参数名类 型参考可空数组备 注
tid整数型线程标识, 可有可无
变量名类 型静态数组备 注
fmax整数型 
i整数型 
' //工作线程内 进行循环
' //得到文件数组
fmax = 取数组成员数 (文件MD5)
计次循环首 (fmax, i)
' //判断文件是否已经在处理了, 在处理就跳过,
判断 (文件MD5 [i].flag > 0)
到循环尾 ()


' //没有处理的  进行处理 先标识 开始处理
文件MD5 [i].flag = 1
_启动窗口.操作记录.加入文本 ( #换行符“线程【”到文本 (tid)“】:正在处理第”到文本 (i)“个文件。”#换行符 )
' //取文件的MD5
文件MD5 [i].md5 = 取数据摘要 (读入文件 (文件MD5 [i].file))  ' //这个读取MD5的命令,最好找别的替换, 不然大文件会分配内存失败
' //
延时 (10)  ' //随便加个延迟
计次循环尾 ()


i支持库列表   支持库注释   
EThread多线程支持库
dp1数据操作支持库一
测试.e (16.16 KB, 下载次数: 24)

评分

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

查看全部评分

回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

发表于 2024-10-29 19:47:11 | 显示全部楼层   江西省南昌市
想多线程玩得好,这个要你电脑cpu性能怎么样,单线程就最稳定的
回复

使用道具 举报

结帖率:87% (20/23)

签到天数: 15 天

发表于 2024-10-29 20:09:17 | 显示全部楼层   广东省深圳市
模块是 解决编写的繁琐命令。多线程  其实 就是 在线程里面继续启用线程
回复

使用道具 举报

结帖率:100% (12/12)

签到天数: 1 天

 楼主| 发表于 2024-10-29 22:55:44 | 显示全部楼层   广西壮族自治区玉林市
qq73s5456 发表于 2024-10-29 20:12
[e=2].版本 2
.支持库 EThread
.支持库 dp1

谢谢大佬,能看懂80%,但是重点在本地MD5跟远程MD5对比,您这里只是多线程取了服务器文件MD5,这个时候MD5排序是乱的,怎么去本地再取同样的文件名MD5,然后多线程去对比,最后得出MD5不同的文件,感觉很绕,或者本地没有这个的文件,目的就是检测本地的文件是否缺少或者MD5跟服务器的不一样,然后进行更新用的
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

发表于 2024-10-29 23:04:45 | 显示全部楼层   广东省深圳市
o风雨o 发表于 2024-10-29 22:55
谢谢大佬,能看懂80%,但是重点在本地MD5跟远程MD5对比,您这里只是多线程取了服务器文件MD5,这个时候MD ...

对比也是同样的呀, 一个读取服务器, 一个读取本地, 就得到两组相同的数据, 循环对比数组不就完成了?
回复

使用道具 举报

结帖率:100% (12/12)

签到天数: 1 天

 楼主| 发表于 2024-10-29 23:13:37 | 显示全部楼层   广西壮族自治区玉林市
qq73s5456 发表于 2024-10-29 23:04
对比也是同样的呀, 一个读取服务器, 一个读取本地, 就得到两组相同的数据, 循环对比数组不就完成了? ...

但是两个MD5数组的排序是乱的的,计次的时候怎么数组1取到MD51,数组2读到的是MD2,这样对比肯定不相同呀,
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

发表于 2024-10-29 23:44:00 | 显示全部楼层   广东省深圳市
测试.e (26.29 KB, 下载次数: 10)
回复

使用道具 举报

结帖率:100% (12/12)

签到天数: 1 天

 楼主| 发表于 2024-10-30 11:59:41 | 显示全部楼层   广西壮族自治区玉林市

我今天尝试了一下使用您第一个修改的程序时取MD5 ,然后程序运行着突然就结束了,没有报错,没有任何信息就运行完毕了,这是啥问题呢

补充内容 (2024-10-30 12:03):
好像是线程开太多的问题,我改线程数少点就没事了
回复

使用道具 举报

结帖率:100% (12/12)

签到天数: 1 天

 楼主| 发表于 2024-10-30 12:56:44 | 显示全部楼层   广西壮族自治区玉林市
qq73s5456 发表于 2024-10-29 20:12
[e=2].版本 2
.支持库 EThread
.支持库 dp1

这个还是有问题,效率没有提升啊,跟单线程一样,因为启动多个线程处理的时候也是把所有MD5的数量计次循环判断一遍,已经处理过的不处理,没处理的去处理,1W个文件,每个线程都是要计次循环1W遍,测试时间是跟单线程一个的效率
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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