我使用多线程读取文件,每个线程都单独打开文件,
在读取过程中,每个线程起始位置不同,总有线程对文件读取一段记录以后就停止了
,读出的字节为-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;

解决方案 »

  1.   

    你是不是各个线程都在读同一个文件的不同位置?
      

  2.   

    不是的,是分别读取不同的位置,没有冲突
      

  3.   

    先锁定文件再读,不过这样的话,你的线程就要排队
      

  4.   

    我在读取文件的线程中加入了互斥操作,但是这样的话就形成了单线程的程序
    所有线程要排队等候
      

  5.   

    这样用多线程也不会快多少.如果你不在线程读取开始时锁定文件,就会发生同步问题,所以每个线程读文件的时候最好都要先锁定.