多线程读取文件问题(200分呀)(200分)

  • 主题发起人 createnew
  • 开始时间
C

createnew

Unregistered / Unconfirmed
GUEST, unregistred user!

我使用多线程读取文件,每个线程都单独打开文件,打开的方式为:
TotalSize:=FileOpen(FFileName,fmOpenRead or fmShareDenyNone) ;
在读取过程中,每个线程起始位置不同,总有线程对文件读取一段记录以后就停止了
,读出的字节为-1,
请问这中方式操作,每个线程读取文件的指针是独立的么?
代码如下:
TotalSize:=FileOpen(FFileName,fmOpenRead or fmShareDenyNone) ;
FileSeek(TotalSize,FStartByteS,0);
//FStartByteS起始位置每个线程不同
try
GetMem(Buffer, MaxBufSize);
while Count > 0do
begin
if Count > MaxBufSize then
N := MaxBufSize else
N := Count;
iBytesRead := FileRead(TotalSize, Buffer^, N);
Data.Clear;
Data.Write(Buffer^,iBytesRead)//写入缓冲区
Dec(Count, iBytesRead);
end;
finally
FileClose(TotalSize);
FreeMem(Buffer, MaxBufSize);
end;
 
Count从何而来?
Data每次的内容都清掉再写,最后Data的内容只是最后读的?
 
漏掉了,count是要读取的字节数据
在单线程访问中,测试多次,这段代码没有任何问题,多线程不对
 
你上面用的那些变量有哪些是局部的,哪些是全局的,如果是全局的,在线程执行过程中
会引起问题,应该使线程同步(用互斥或阻塞),防止冲突
 
我已经解决了,在读文件的过程中建立互斥线程,
使同一个时刻只有一个线程读取文件就OK
 
但是这样的话我的多线程程序就成了单线程的了??
 
程序要上交了,请大家帮帮忙!
 
把上面的代码的变量都变成局部的试试
 
多人接受答案了。
 
顶部