![]() |
Delphi-Version: 2010
Synchronisierung mit MainThread ohne Thread-Kontext
Und war interessiert mich, ob es möglich ist, mit dem MainThread zu synchronisieren, obwohl man sich nicht in einem TThread-Objekt befindet. TThread stellt ja automatisch die
Delphi-Quellcode:
-Methode zur Verfügung. Aber selbst die statischen Klassenmethoden davon helfen mir nicht wirklich, da ich ja keine TThread-Instanz zur Verfügung habe.
Synchronize()
Hintergrund des Ganzen ist, dass ich ein Handle im Kontext des MainThread erzeugen muss, um, darüber Nachrichten austauschen zu könnten. Mein Objekt will ich nicht von TThread ableiten, da es einfach unpassend ist. Zudem arbeitet diese Klasse als Singleton-Pattern mit Lazy Load, d.h. die einzige Instanz wird erst erzeugt, wenn diese auch zum ersten mal zum Einsatz kommt, d.h. im Klartext, dass auch ein Thread ungleich dem MainThread den Constructor aufrufen kann. Und genau hier liegt die Krux mit der Geschichte: im Constructor wird das Handle für die Klasse erzeugt. Ich hoffe, dass die wichtigen Punkte klar rüber gekommen sind :mrgreen: |
AW: Synchronisierung mit MainThread ohne Thread-Kontext
funktioniert doch:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var id:Cardinal; begin BeginThread(nil,0,@TForm1.ThreadFunc,self,0,id); end; procedure TForm1.snyc; begin if GetCurrentThreadId=system.MainThreadID then showmessage('yes'); end; function TForm1.ThreadFunc: Integer; begin TThread.Synchronize(nil,snyc); end; |
AW: Synchronisierung mit MainThread ohne Thread-Kontext
Die EnterMainThread/LeaveMainThread aus den
![]() |
AW: Synchronisierung mit MainThread ohne Thread-Kontext
@sirius: Wie, wenn wenn nil übergebe, so funktioniert das auch?! Auf die Idee bin ich noch gar nicht gekommen.
// edit Hm, irgendwie führt der Aufruf von
Delphi-Quellcode:
zu einem Deadlock :gruebel: Was aber wie zu erwarten an meinem Programm lag :)
TThread.Synchronize(nil, ...)
|
AW: Synchronisierung mit MainThread ohne Thread-Kontext
De9in Deadlock liegt aber an etwas anderem.
|
AW: Synchronisierung mit MainThread ohne Thread-Kontext
Siehe den Satz den ich noch dazu geschrieben habe. Der MainThread ist leider in den wartenden Zustand übergegangen -> CriticalSection.
Danke aber noch, hat wunderbar funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz