Tutorial Threads:
https://wiki.delphigl.com/index.php/...Multithreading
Zitat:
Zitat:
Alles was aus dem Execute aufgerufen wird hat als Kontext diesen Thread!
Zitat:
Jetzt stellt sich natürlich die Frage was muss alles synchronisiert werden?
Pauschal lässt sich nur sagen,
alles was irgendwo von mehreren Threads (incl. VCL-Thread) geschrieben werden kann muss synchronisiert werden. Ich erkläre euch das mal besser an einem kleinem Beispiel:
Nehmen wir einmal an wir haben einen Webspider. Dieser soll 200 Webseiten downloaden.
Wir erstellen uns einen Thread dem ich die
URL übergebe und der selbständig mit dem Laden anfängt. Wenn dieser fertig ist dann sagt er
dem VCL-Thread mittels eines Events, dass er fertig ist.
Grundsätzlich werden die "Werte der Berechnung z.B" nur über Events rausgegeben. Diese werden
IMMER synchronisiert.
Delphi-Quellcode:
type
TBinFertig =
procedure(
const Content:
String)
of object;
TMyOwnThread =
class(TThread)
private
FBinFertig: TBinFertig;
procedure SyncBinFertig;
public
property BinFertig: TBinFertig
read FBinFertig
write FBinFertig;
end;
implementation
procedure TMyOwnThread.SyncBinFertig;
begin
if Assigned(FBinFertig)
then FBinFertig(DasIstDerInhaltDerWebseite);
end;
procedure TMyOwnThread.Execute;
begin
try
// Download der Seite ...
// Synchronisieren
Synchronize(SyncBinFertig);
except
on e:
exception do begin
// mache hier irgendetwas mit dem Fehler.
end;
end;
end;