![]() |
Delphi-Version: XE2
Threads und Events
Moin.
Kann man Threads so mit Events verwenden, wenn die Methode StartNow von einem anderen bzw. Hauptthread aufgerufen wird, oder gibt es da irgendwelche Fallstricke?
Delphi-Quellcode:
type
TMyThread = class(TThread) private FStart: TEvent; protected procedure Execute; override; public procedure StartNow(); end; implementation procedure TMyThread.Execute; begin FStart := TEvent.Create(nil, false, false, ''); while not Terminated do begin //--- Auf StartEvent warten FStart.WaitFor(INFINITE); ... ... end; end; procedure TSweepThread.StartNow; begin FStart.SetEvent; end; |
AW: Threads und Events
Mit den originalen Events von Windows (CreateEvent, SetEvent, ...) ist das kein Problem. TEvent habe ich noch nie benutzt, aber ich vermute, dass das auch nur auf die API zugreift und es dann auch kein Problem sein sollte.
|
AW: Threads und Events
Sehe da kein Problem.
Jup, TEvent kapselt nur API Aufrufe, soweit ich das noch weiß. |
AW: Threads und Events
Verwendest Du dabei die gleiche Variable FStart? Das mag funktionieren, weil das WaitFor ja unendlich wartet und da steht und solange mutmaßlich eh kein anderer Zugriff auf FStart stattfindet. Aber sauberer wäre imho ein named event, jeweils getrennt angelegt. So verfahre ich in etlichen Threads, meistens um Pausen einzubauen, die bei Programmende aber durch den Event-Trigger den Thread sofort beenden lassen.
Genauso würde ich nicht INFINITE warten, sondern eine vordefinierte Zeit, und stattdessen den Rückgabewert auswerten (entweder Timeout oder gewünschtes Signal). So braucht das Programm halt maximal jene vordefinierte Zeit und der Thread muss nicht auf die harte Tour getötet werden. |
AW: Threads und Events
Du solltest an dieser Stelle THandleObject.WaitForMultiple nutzen, damit auch ein Terminate noch verarbeitet wird. Dazu musst du ein zweites Event erzeugen, welches im DoTerminate deiner Threadklasse signalisiert wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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