Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Fehler beim Parent setzen eines Labels

  Alt 30. Jun 2012, 10:57
Die VCL ist nunmal nicht threadsicher und daher darf man diese einfach grundsätzlich nicht unsynchronisiert in Threads verwenden *punkt*

Ein TLabel ist keine eigenständige Komponente, sondern sie hängt sich "brutal" in dessen Parent, um sich auf dessen Canvas zu zeichnen.

Beim RichEdit gibt es vielleicht an dieser Stelle zufällig grade kein Problem, aber daß heißt nicht, daß es nicht wo anders knallen könnte.

PS: Die Owner- und Parentbeziehungen werden auch noch in mehreren TList verwaltet, welche nicht threadsicher sind und hierbei bearbeitet werden,
außerdem gibt es viele weitere gemeinsam genutze Komponenten, wie Fonts, Brushs, Pens usw., welche ebenfalls nicht threadsicher sind.


Fazit: Man macht das einfach nicht, selbst wenn es zufällig dennoch scheinbar mal keine Probleme zu geben scheint.


Und dazu wird das Messagehandling mit dem Thread verlinkt, wo eine Komponente erstellt wird, also da wo z.B. das MSDN-Library durchsuchenCreateWindow aufgerufen wird.
Delphi hat von sich aus nur im Hauptthread eine Messagebehandlung integriert. In allen anderen Threads müsste man dieses selber erledigen.
Das merkt man sehr gut, denn wenn man den Haupttread auslastet und der VCL keine Möglichkeit bietet diese Messages zu verarbeiten, dann hängen alle Fenster.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Jun 2012 um 11:01 Uhr)
  Mit Zitat antworten Zitat