Xelloss0618 发表于 2022-3-30 09:15 比如,开发一个图片批量水印的,几千个是正常的。因为支持文件拖放的软件,一般都会去过滤一些不必要的文件类型的,所以通过事件及时分析类型并过滤,而一个个加入数组则等于是阻塞了线程。我已经更改了,判断当前接收的序号判断不同批次的文件,也没有额外增加变量,仅仅是通过现有的变量传递到事件参数 |
芒g一号 发表于 2022-3-30 09:43 我帖子是个提问帖,关于拖放批次判断的 |
b0y 发表于 2022-3-29 22:49 你帖子没有源码也是不完美 |
文本数组类是越大越慢没错,但一次拖入的文件一般不会上万,那点效率差距(几毫秒)基本可以忽略不计 主要还是方便,比如按文件类型分类,直接用局部变量就行了,按你一个个接收文件,那得用成员变量 |
b0y 发表于 2022-3-29 23:42 要判断是哪一个批次传入的话,定义一个变量区别就是,或者直接传递 每个批次的数量 和 当前接收到的文件的索引,就可以很轻松判断是哪个批次的,只要判断 每批次的数量 - 1 = 当前接收到的文件的索引 就可以判断一批文件接收完毕了,或者直接判断 当前接收的文件索引 是不是以 0 开头就表示是不是新的一个批次了。 文件拖放,狠多时候是需要过滤掉 目录 的,有时候也需要过滤掉部分文件类型,按他们传递数组的话,等于是阻塞了,比如一次传递 几百个文件,你要等接收完几百个文件后 他们才给你返回目前的接收到的文件内容,然后再枚举数组的成员一个一个分析,而我的方法早就分析完了,效率的差别就体现在这里。 夸张一点,你可能就会更加明白那些传递数组回来的效率有多差,如果,用户一次拖入100W个文件,你可能要等十几分钟才能到手事件,然后才能处理接收到的文件。 自己把模块的 拖放事件 增加2个参数:当前批次文件数、当前接收索引,然后上面 C++代码把 nFilesCount 、 i 传递过去就可以了 |
Xelloss0618 发表于 2022-3-29 23:06 要区分哪一批次拖入的,也一样可以传递到事件接收里面阿,定义一个变量,或者直接传递 本批次数量 和 当前接收的索引 ,判断当前接收的索引 = 本批次数量 - 1 ,就说明一个批次完了 |
Xelloss0618 发表于 2022-3-29 23:06 比如,我拖放文件之后,我需要过滤掉目录或者指定的文件,用我改的这样可以更加高效。我是综合了几个模块来着。官方和其它的模块 就是一个一个加到数组,然后再回传数组,这样拖放事件的意义就不大了,还不如直接来一个 取拖放文件数组() 之类的方法了。事件 我理解的意思是收到一个文件,就触发一次。当然,这个是我理解的 |
Xelloss0618 发表于 2022-3-29 23:06 是的,之前有这个需求,找了几个拖放都是单独的,不好判断是不是一次拖放的,火山模块数组输出的可以 |
b0y 发表于 2022-3-29 22:49 哈哈,你看楼主上一条的回复就知道了,他喜欢单独接收每个文件,其实楼主这个代码主要就是把仰望火山模块里的改成单文件 火山模块里的文件拖放恰好是我之前提交给仰望修改的,主要是加了 ChangeWindowMessageFilter,可以在以管理员身份运行的时候也能接收到投放文件。 现在官方MFC里的文件拖放也是这个问题,没有加 ChangeWindowMessageFilter 或 ChangeWindowMessageFilterEx,以管理员身份运行就接收不到文件了。 个人来说,当然是返回文件数组最好,拆分了就无法区别是哪次拖进去的,和一次拖了多少个文件,这些在某些情况下是有意义的。 |
|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )
GMT+8, 2024-11-25 03:00 , Processed in 0.088555 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.