如何把多线程下载的数据按位置写入一个文件

楼主 fenjin(奋进)2005-08-26 07:29:30 在 VC/MFC / 进程/线程/DLL 提问

我所知道的方法:  
  1、分成几个小的文件,然后再合并。  
  2、写入一个文件,通过移动写入位置来写入对应的数据。  
   
  方法1的缺点是生成多个临时文件,方法2的缺点但下载中断时文件的大小于实际写入的数据不相符!  
  而FlashGet下载后的文件只有一个文件,而且下载多少数据就显示多少!  
   
  请高手指点!  
  谢! 问题点数:20、回复次数:11

1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-08-26 10:54:15 得分 0

同步!

2 楼hamimelon(夜过留香)回复于 2005-08-26 11:38:23 得分 0

同时写的话,要用临界区

3 楼noneone(noneone)回复于 2005-08-26 17:03:54 得分 0

一种土办法,建立一个filemap,然后就可以当成多线程访问同一块内存来处理了,需要记录一下位置信息

4 楼fenjin(奋进)回复于 2005-08-26 21:51:52 得分 0

能否给提供点代码学习学习!  
  同步是什么意思?

5 楼mynamelj(夏娃的诱惑)回复于 2005-08-28 14:47:17 得分 0

FlashGet應該不是多線程寫文件﹐它是多線程下載文件﹐然后放入一個內存區﹐再寫入文件中。  
   
  其實它并不需利用多個線程來寫文件﹐只要文件下載到了內存區中寫文件的速度是相當快的。

6 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-08-29 00:09:33 得分 0

每个线程访问的文件区域固定的话可以用方法2,否则还是用方法1

7 楼cfgm(风色幻想)回复于 2006-02-13 17:41:05 得分 0

建立内存缓冲区,比如8M,多线程共用,当满了以后,就有另一个检测线程负责转移到硬盘文件中。  
   
  迅雷似乎是这样做的。这样的好处是下载与文件大小无关,无论是多大的文件,都只用固定的内存缓冲区。  
   
 

8 楼cfgm(风色幻想)回复于 2006-02-14 09:33:30 得分 0

这里有一个例子,我刚写的一个  
   
  http://guoxin.org/home/guoxin/blog/blogView.asp?blogId=225  
   
  提供试用版下载

9 楼striking(庸人自扰)回复于 2006-02-15 09:22:38 得分 0

flashget   下载的时候先生成文件,   然后用2

10 楼xrenwu(卖火柴的大男孩)回复于 2006-02-17 14:21:35 得分 0

好贴,我顶

11 楼gao_ming77(小明)回复于 2006-02-17 14:27:20 得分 0

先生成一个文件,里面填充占位数据。然后多个线程,分段利用完成端口方式(WriteFileEx)写文件。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值