![]() |
In Thread auf Event warten
Servus,
ich machs kurz: In einer DLL wird ein Thread erstellt, in dem ich wiederum ein Object erstelle, auf dessen Ereignisse ich reagieren möchte. Ansonsten hat der Thread keine weiteren Aufgaben, ich möchte praktisch nur ressourcenschonend auf Ereignisse warten. Basteleien mit WaitForSingleObject in Verbindung mit CreateEvent und SetEvent haben ins Leere geführt. Wie macht man das richtig?
Delphi-Quellcode:
Danke schonmal.
library MyObjProject;
uses Classes; {$R *.res} type TMyThread = class(TThread) private Obj: TMyObj; procedure OnSomeEvent; protected procedure Execute; override; end; { TMyThread } procedure TMyThread.Execute; begin Obj := TObject.Create; {jetzt arbeitet das Object} {Eventhandler zuweisen} Obj.OnSomeEvent := OnSomeEvent; {hier jetzt auf Events warten... nur wie?} end; procedure TMyThread.OnSomeEvent; begin {...} end; begin TMyThread.Create(false); end. Björn |
Re: In Thread auf Event warten
Das hängt von deinem Objekt ab. Was macht es denn?
|
Re: In Thread auf Event warten
Es empfängt WM_DEVICECHANGE Nachrichten und löst ein Event bei USB Geräteanschluss/-entfernung aus (ähnlich
![]() |
Re: In Thread auf Event warten
Dann baust du eine Messageschleife:
Delphi-Quellcode:
Achte darauf, dass du die Methode Terminate redefinierst und darin Postthreadmessage mit WM_Quit sendest.
while getmessage(msg,0,0,0) do //msg von Typ TMsg
dispatchmessage(msg); |
Re: In Thread auf Event warten
Danke, die Nachrichtenschleife läuft!
Meinst du das mit PostThreadMessage so in etwa?
Delphi-Quellcode:
Und warum braucht man das? Warum die Schleife nicht so:
type
TMyThread = class(TThread) {...} protected procedure Terminate; end; { TMyThread } {...} procedure TMyThread.Terminate; begin PostThreadMessage(Self.ThreadID, WM_QUIT, 0, 0); inherited Terminate; end;
Delphi-Quellcode:
while (not Terminated) and GetMessage(Msg, 0, 0, 0) do
DispatchMessage(Msg); |
Re: In Thread auf Event warten
Ja, so meine ich das. Und das braucht man, weil GetMessage blockierend ist und nur zurückkommt, wenn eine asynchrone Message gesendet wurde. Nun kann man naürlich nach einem terminate warten, bis irgendeine Komponente in dem Thread diese bekommt oder man erzwingt sie, damit alles recht flott geht.
|
Re: In Thread auf Event warten
Super, danke für Deine Hilfe! :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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 by Thomas Breitkreuz