Wenn du die meiste Zeit synchronisiert in der
GUI rumhängst, dan bringt der Thread garnichts und ist eher kontraproduktiv.
Du kannst aber eine TStringList in den Thread nehmen, da alles einfügen und am Ende alles Gemeinsam via AddStrings ins Memo einfügen. (oder zumindestens grüppchenweise weniger oft übergeben)
Du kannst in dem Thread alles machen, aber sobald "globale" nicht threadsichere dinge genutzt werden, mußt du synchronisieren oder sonstwie die Zugriffe regeln.
Ach ja, wenn du zu oft Synchronize aufrufst, also vorallem viele Male extrem schnell hinterinander, dann kannst du damit den
GUI-Thread lahmlegen, da er keiner Zeit mehr für seinen eigenen Kram hat.
Im Delphi find ich einmalig genutzte und "kurze" Sync-Methoden via Generics, genauer als anonyme Methode oftmals irgendwie übersichtlicher.
Vorallem da man dort
Parameter Variablen übergeben bekommt, ohne daß Diese global sein müssen. (was Probleme gibt, wenn die Methode+Variable von mehreren Threads aus gleichzeigt aufgerufen werden kann)
Delphi-Quellcode:
procedure TMyOwnThread.Execute;
begin
try
Synchronize(
nil,
procedure
var
i : Integer;
begin
i := 0;
while i <= 20
do begin
Form1.Memo1.Lines.Add(IntTostr(i));
i := i + 1;
end;
end);
except
on e:
Exception do
ShowMessage(e.
Message);
end;
end;
So ginge es auch.
Delphi-Quellcode:
procedure TMyOwnThread.Execute;
var
i : Integer;
begin
try
i := 0;
Synchronize(
nil,
procedure
begin
while i <= 20
do begin
Form1.Memo1.Lines.Add(IntTostr(i));
i := i + 1;
end;
end);
except
on e:
Exception do
ShowMessage(e.
Message);
end;
end;