AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi MsgWaitForMultipleObjects - Wie warte ich auf zwei Events
Thema durchsuchen
Ansicht
Themen-Optionen

MsgWaitForMultipleObjects - Wie warte ich auf zwei Events

Ein Thema von DataCool · begonnen am 11. Dez 2003 · letzter Beitrag vom 12. Dez 2003
Antwort Antwort
Benutzerbild von DataCool
DataCool

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

MsgWaitForMultipleObjects - Wie warte ich auf zwei Events

  Alt 11. Dez 2003, 11:46
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
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, 11: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 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