![]() |
Re: Events in einem Thread
Zitat:
Was tatsächlich wichtig ist, ist die Tatsache, dass allocatehwnd nicht threadsafe ist. Das ist ja nicht nur für TTimer wichtig sondern generell für simple Messageschleifen in einem Thread. Also baut man sich mittels CreateWindow das Fenster selbst, oder versucht auf Messages zu verzichten und lieber mit Events zu arbeiten. |
Re: Events in einem Thread
Genau, es ist nur ein Beispiel.
Es geht mir vor allem um eigene Objekte mit eigenen Events. Aber soweit ich das mit Messages verstanden habe übergebe ich dem Objekt bei der Erstellung die ThreadID und sende dann meine eigenen Nachrichten (WM_USER + x). Oder belege (wie dominikkv vorgeschlagen hat) das Ereignis mit PostThreadMessage. Ich muss nur darauf achten dass die Parameter threadsicher gespeichert werden (der Workthread soll ja mehr als nur ein NotifyEvent bekommen). |
AW: Events in einem Thread
Das Thema ist schon etwas älter aber ich habe es so gelöst:
Code:
fcint ist die Zeit die der Thread warten soll.
constructor TBThread.Create;
begin inherited Create(true); FTerminateEvent := CreateEvent(nil, true, False, nil); end; destructor TBThread.Destroy; begin SetEvent(FTerminateEvent); CloseHandle(FTerminateEvent); inherited; end; procedure TBThread.Execute; begin while not Terminated do begin if WaitForSingleObject(FTerminateEvent, fcint) = WAIT_TIMEOUT then begin if not Terminated then DoSomething; end; end; end; procedure TBThread.TerminatedSet; begin inherited; SetEvent(FTerminateEvent); end; Und durch dass Event welches durch die überschriebene Methode TerminatedSet gesetzt wird wird das warten vorzeitig beendet. |
AW: Events in einem Thread
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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