多线程读取文件问题?有什么问题

刘大黑 2002-10-31 08:46:13
我使用多线程读取文件,每个线程都单独打开文件,
在读取过程中,每个线程起始位置不同,总有线程对文件读取一段记录以后就停止了
,读出的字节为-1,请问这中方式操作,每个线程读取文件的指针是独立的么?
代码如下:
TotalSize:=FileOpen(FFileName,fmOpenRead or fmShareDenyNone) ;
FileSeek(TotalSize,FStartByteS,0);
//FStartByteS起始位置每个线程不同
try
GetMem(Buffer, MaxBufSize);
while Count > 0 do
begin
if Count > MaxBufSize then N := MaxBufSize else N := Count;
iBytesRead := FileRead(TotalSize, Buffer^, N);
//写入缓冲区
Data.Clear;//自定义结构
Data.Write(Buffer^,iBytesRead)//写入Data
Dec(Count, iBytesRead);
end;
finally
FileClose(TotalSize);
FreeMem(Buffer, MaxBufSize);
end;
...全文
74 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘大黑 2002-11-01
  • 打赏
  • 举报
回复
不是的,是分别读取不同的位置,没有冲突
knock 2002-11-01
  • 打赏
  • 举报
回复
这样用多线程也不会快多少.如果你不在线程读取开始时锁定文件,就会发生同步问题,所以每个线程读文件的时候最好都要先锁定.
刘大黑 2002-11-01
  • 打赏
  • 举报
回复
我在读取文件的线程中加入了互斥操作,但是这样的话就形成了单线程的程序
所有线程要排队等候
Sumie@Sam 2002-11-01
  • 打赏
  • 举报
回复
先锁定文件再读,不过这样的话,你的线程就要排队
hfycl 2002-10-31
  • 打赏
  • 举报
回复
up
lws0472 2002-10-31
  • 打赏
  • 举报
回复
你是不是各个线程都在读同一个文件的不同位置?

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧