Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: Einen ThreadCounter setzten / Thread besser verstehen.

  Alt 27. Apr 2005, 01:52
nach dem der neue Thread angelaufen ist, must Du dort in einer lokalen Variable den Zählerstand zum Zeitpunkt des Thread-Startes zwischenspeichern....
ansonsten gilt der Wert der globalen Variable für jeden Thread und jeden Schleifendurchgang...

Delphi-Quellcode:
var
  COUNTER: Integer = 0;

////////////////////////////////////////////////////////////////////////////////
// procedure StarteThread;
// Korrekte Signatur ist:
Function StarteThread(Parameter : Pointer) : LongWord; StdCall;
var
  ID,
  I: Integer;
begin
  ID := InterlockedIncrement(COUNTER);
  // Zähler atomar (unteilbar, serialisiert) inkrementieren, und Resultat zwischenspeichern

  for I := 0 to 100 do begin
    Form1.ListBox1.Items.Add('Thread: '+IntToStr(ID)+' Schleifendurchlauf: '+IntToStr(I));
    // dies ist unschön, da VCL nicht thread-safe... Quelle für lästige Bugs...
    // bei produktiven Anwendungen mittels Synchronize() auskoppeln, oder ganz auf Messages umstellen

    SendMessage(Form1.ListBox1.Handle,WM_VSCROLL,SB_BOTTOM,0);
    Sleep(100);
  end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
  TID: cardinal;
begin
  CreateThread(0,0,@StarteThread,0,0,TID);
end;
////////////////////////////////////////////////////////////////////////////////
  Mit Zitat antworten Zitat