Changeset 6 for trunk/UDriveScan.pas


Ignore:
Timestamp:
Mar 30, 2016, 10:50:22 PM (8 years ago)
Author:
chronos
Message:
  • Modified: TBlockMap reworked to sparse map using list of value changes. Now much less memory is required to keep sector map of high capacity drives. Also drawing of map is much faster.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UDriveScan.pas

    r5 r6  
    5454implementation
    5555
     56resourcestring
     57  SUnknownRunMode = 'Unknown run mode';
     58
    5659
    5760{ TScanThread }
     
    8285procedure TDriveScan.Start;
    8386begin
    84   ScanThread := TScanThread.Create(True);
    85   ScanThread.Scan := Self;
    86   ScanThread.Start;
     87  if Terminated then begin
     88    Terminated := False;
     89    ScanThread := TScanThread.Create(True);
     90    ScanThread.Scan := Self;
     91    ScanThread.Start;
     92  end;
    8793end;
    8894
     
    120126        if Mode = rmRead then RealSize := F.Read(Buffer[0], SectorSize)
    121127          else if Mode = rmWrite then RealSize := F.Write(Buffer[0], SectorSize)
    122           else raise Exception.Create('Unknwon run mode');
     128          else raise Exception.Create(SUnknownRunMode);
    123129      end;
    124130    finally
     
    144150procedure TDriveScan.Stop;
    145151begin
    146   Terminated := True;
    147   ScanThread.Terminate;
    148   ScanThread.WaitFor;
    149   FreeAndNil(ScanThread);
     152  if not Terminated then begin
     153    Terminated := True;
     154    ScanThread.Terminate;
     155    ScanThread.WaitFor;
     156    FreeAndNil(ScanThread);
     157  end;
    150158end;
    151159
     
    160168destructor TDriveScan.Destroy;
    161169begin
     170  Stop;
    162171  FreeAndNil(BlockMap);
    163172  FreeAndNil(Lock);
Note: See TracChangeset for help on using the changeset viewer.