Hi,
habe die Lösung selber durch langes probieren gefunden
Code:
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;
Wichtig bei dem Beispiel ist noch folgendes :
1. Die verwendeten Events hMsgEvent u. hCloseEvent müssen vorher natürlich erzeugt werden(am besten im Create des Threads) :
Code:
// Namen müssen eindeutig sein !!!
hCloseEvent := CreateEvent(nil, False, False, 'EndmyThread');
hMsgEvent := CreateEvent(nil, False, False, 'Msg4myThread');
2. Die erzeugten Events müssen auch wieder freigegeben werden(am besten im OnTerminate des Threads) :
Code:
CloseHandle(hMsgEvent);
CloseHandle(hCloseEvent);
Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.