Einzelnen Beitrag anzeigen

Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: MsgWaitForMultipleObjects - Wie warte ich auf zwei Event

  Alt 12. Dez 2003, 12:14
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.
  Mit Zitat antworten Zitat