Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: StringGrid.Create threadsicher?

  Alt 28. Nov 2024, 19:11
Und die meisten VCL-Objekte (die mit einem HWND) sind auch noch thread-affine.

Ihre Messages werden nur über die Thread-MessageQueue behandelt, in dessen Thread sie erstellt wurden.


A: VCL ist nicht thread-save ... es werden öfters globale Default-Sachen gemeinsam verwendndet, wie z.B. in TFont, TPen und TBrush.

B: ein VCL-Objekt muß auch im VCL-Thread (MainThread) erstellt werden. (da du bestimmt vergessen hast die Message-Queue deines Threads abzuarbeiten)

C: Sowas mach man einfach nicht.


Es gibt einige Komponenten, die kann man teilweise in einem Thread behandeln. (nicht erstellen/freigeben ... nur auf gewisse Teile drauf zugreifen)
z.B. ein Bitmap/Image/Canvas, so lange das Canvas gesperrt wurde,
oder eine ListBox mit BeginUpdate (natürlich im Hauptthread ausgeführt)




-> TThread.Syncronize und TThread.Queue

SendMessage und PostMessage syncronisieren sich selbst, in den Thread, wo die Empfänger-Komponente erstellt wurde.
$2B or not $2B

Geändert von himitsu (28. Nov 2024 um 19:17 Uhr)
  Mit Zitat antworten Zitat