Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Threads: Wie globale Int64-Variable sicher inkrementieren?

  Alt 4. Aug 2004, 01:39
Hi,

Ein Beispiel: In Unit1.pas ist die globale Variable TotalBytesRec definiert.
Delphi-Quellcode:
var
 TotalBytesRec : Int64 = 0;
In einem von mehreren Threads wird folgender Code ausgeführt:

Delphi-Quellcode:
procedure TDownloadThread.OnWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
var i: Integer;
begin
 If AWorkMode=wmRead then
  begin
   Inc(TotalBytesRec, AWorkCount-FLastWorkCount);
   i := PercentDone;
   PercentDone := trunc((AWorkCount / FileSize) * 100);
   If i<>PercentDone then Synchronize(UpdateProgress);
   FLastWorkCount := AWorkCount;
  end;
end;
Das Problem:
Der Aufruf von Inc() macht mir Sorgen; ist das überhaupt Thread-sicher? Bei nem Int64 wird wohl kaum eine atomare Operation daraus

Gruß,
Dani
Dani H.
  Mit Zitat antworten Zitat