Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi MsgWaitForMultipleObjects - Wie warte ich auf zwei Events (https://www.delphipraxis.net/13117-msgwaitformultipleobjects-wie-warte-ich-auf-zwei-events.html)

DataCool 11. Dez 2003 11:46


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

DataCool 12. Dez 2003 11:14

Re: MsgWaitForMultipleObjects - Wie warte ich auf zwei Event
 
Hi,

habe die Lösung selber durch langes probieren gefunden :drunken:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz