![]() |
MsgWaitForMultipleObjects - Wie warte ich auf zwei Events
Hi,
kann mir jemand ein kleines Beispiel für die Verwendung von : MsgWaitForMultipleObjects in Verbindung mit dem Warten auf Zwei Events + TimeOut inerhalb eines Threads geben. Danke DataCool |
Re: MsgWaitForMultipleObjects - Wie warte ich auf zwei Event
Hi,
habe die Lösung selber durch langes probieren gefunden :drunken:
Code:
Wichtig bei dem Beispiel ist noch folgendes :
procedure TTestThread.Execute;
Var bExit : Boolean; HandleArray : Array of THandle; wRes : Word; begin bExit := false; setLength(HandleArray,2); HandleArray[0] := hMsgEvent; HandleArray[1] := hCloseEvent; Repeat wRes := MsgWaitForMultipleObjects(2,PDWord(HandleArray)^,false,INFINITE,QS_ALLINPUT); case wRes of WAIT_OBJECT_0 + 0 : // Msg Event begin if fMsgList.count > 0 then begin fMsg := FormatDateTime('hh:mm:ss:zzz',now)+' '+fMsgList[0]; fMsgList.Delete(0); Synchronize(logMsg); end; end; WAIT_OBJECT_0 + 1 : // CloseEvent bExit := true; end; until (bExit) ; setlength(HandleArray,0); end; 1. Die verwendeten Events hMsgEvent u. hCloseEvent müssen vorher natürlich erzeugt werden(am besten im Create des Threads) :
Code:
2. Die erzeugten Events müssen auch wieder freigegeben werden(am besten im OnTerminate des Threads) :
// Namen müssen eindeutig sein !!!
hCloseEvent := CreateEvent(nil, False, False, 'EndmyThread'); hMsgEvent := CreateEvent(nil, False, False, 'Msg4myThread');
Code:
Gruß Data
CloseHandle(hMsgEvent);
CloseHandle(hCloseEvent); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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