Thema: Delphi Event Handler in Thread?

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Event Handler in Thread?

  Alt 22. Okt 2009, 21:59
Du musst in dem Thread ein Fenster erstellen (allocatehwnd) und dann eine Messageschleife (GetMessage, Dispatchmessage) aufbauen.

Also Beispielsweise so (ohne zu wissen, was drumherum passiert)
Delphi-Quellcode:
type TmyThread=class(TThread)
       private
        Fwnd:hwnd;
        procedure WndProc(var Msg:TMessage);
        procedure MMInDone (Var Msg : Tmessage); Message MM_WIM_DATA;
       protected
        procedure Execute; override;
[...]

procedure TmyThread.Execute;
var msg:Tmsg;
begin
  Fwnd:=allocatehwnd(WndProc); //hier ist jetzt dein Windowhandle für MMAudio
  try
    [weitere Initialisierungen]
    while getMessage(msg,0,0,0) do //warten auf Message
      DispatchMessage(msg); //verteilen auf das entsprechende Fenster (gibt hier allerdings eh nur eins)
  finally
    Deallocatehwnd(Fwnd);
  end;
end;

procedure wndProc(...);
begin
  dispatch(msg); //verteilen auf die Methoden mit der entsprechenden Message -->MMInDone
end;
GEtMessage legt den Thread schlafen, bis eine neue Message ankommt. Wenn du das nicht willst, musst du peekMessage verwenden. Die while-Schleife wird verlassen, wenn du WM_Quit sendest (Achte darauf, dass du das zum terminieren des Threads brauchst -->Methode Terminate überschreiben)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat