| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3104 人关注过本帖
标题:多线程读文件,如何设置文件指针
只看楼主 加入收藏
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
 问题点数:0 回复次数:8 
多线程读文件,如何设置文件指针

各位高手,我编写了一个类,主要是多线程下读取单个文件
我把文件分成了五个部分,用五个线程分别去读取。
假如我用类实例化五个对象,每个对象负责一个部分,无疑是可行的。因为没有共享数据,不会造个共享数据的混乱,
但这样的话,就要分配五个对象的空间,太占内存了。
求助:在一个对象下,如何去实现五个线程分别读取各自部分,而不会冲突呢?
最好有源码说明,也可以说一下实现原理,多谢!

搜索更多相关主题的帖子: 线程 指针 文件 设置 
2007-07-10 14:46
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
在切换到另外一个线程时,将文件指针也移动到该线程读取的地方就是,比如5个线程,文件分5个快读取

假如文件总共500k
线程
1 1-100k
2 101-200k
3 201-300k
4 301-400k
5 401-500k

每读取一次时,将文件指针保存下来,当另外一个线程开始读取时,将文件指针移动到该线程读取的地方,比如现在是第4个线程,那么就将文件指针移动到301k的地方开始读取,然后读取后的指针位置,当下次论到该线程读取的时候,就将文件指针移动到上次读取的位置开始读取.

2007-07-10 15:04
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
谢谢2楼的答复,实际问题是这样的,我用五个线程同时调用类里一个函数(文件读取函数),为了传送大文件,我采
用每次读取几个字节,模式如下:
long distanceToMove;
while(overFlag)
{
sendFile.Seek(distanceToMove,CFile::begin);
recvFile.Seek(distanceToMove,CFile::begin);
byte* data=new byte[2048];
sendFile.Read(data,2048);
recvFile.Write(data,2048);
}
sendFile.Close();
recvFile.Close();
几个线程都会同时运行这个函数进行读写,怎样才能确定是哪个线程在读?
distanceToMove是随时在变的哦,如何设置这个变量呢?请详细说明,谢谢
2007-07-11 10:35
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
忘了加delete [] data
2007-07-11 10:35
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
没有高手来指点一下吗??
2007-07-12 09:07
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
不要采用阻塞试套节字,采用异步套节字,发数据后,不要立即去读文件

2007-07-12 09:16
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
能详细说明一下吗?最好有代码可参考下,谢谢
2007-07-12 10:39
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
还有我用多线程同时写一个文件时就会在ASSERT(m_hFile != INVALID_HANDLE_VALUE);触发断点
好困苦啊,请高手多多指点啊!!!!!
2007-07-12 11:00
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
触发断点的问题解决,原来不小心在一个线程中关闭了文件,而另外的线程读写还没结束
2007-07-12 11:13
快速回复:多线程读文件,如何设置文件指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048107 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved