Thema: Delphi VCL not thread save

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.036 Beiträge
 
Delphi 12 Athens
 
#17

AW: VCL not thread save

  Alt 6. Mär 2014, 21:13
Die Synchronize - Methode von TThread kann man in neuen Delphi Versionen auch mit einer Closure aufrufen.
Dazu ein interessanter Artikel von Uwe Rabe:
http://www.uweraabe.de/Blog/2011/01/...th-parameters/
Wobei das hier Einige () auch schon vor 2011 gemacht haben.

Denn das ist eigentlich sogar eine der wenigen "einfachen" Möglichkeiten Parameter "threadsicher" an den Zielthrad zu übergeben.
(ohne sich eine threadsichere globale Variable anzulegen, oder gar gleich eine ganze Liste, wenn diese Methode aus mehreren Threads gleichzeitig aufgerufen werden könnte)

Delphi-Quellcode:
// innerhalb von TThread.Execute
Synchronize(procedure
  begin
    CallMyProgress(PercentComplete);
  end);
Delphi-Quellcode:
// in Threads, die nicht von TThread abstammen oder wo man auf die TThread-Instanz keinen Zugriff hatte.
TThread.Synchronize(nil, procedure
  begin
    CallMyProgress(PercentComplete);
  end);
Wobei man ja mindestens seit XE3 sich eine Pseudoinstanz des eigentlichen TThreads oder gar eine Instanz für etwas, daß dein TThread ist, erstellen lassen kann.
Ich glaub das ging mit TThread.CurrentThread, oder so.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Mär 2014 um 21:15 Uhr)
  Mit Zitat antworten Zitat