Thema: Delphi Events in TThread

Einzelnen Beitrag anzeigen

DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#19

Re: Events in TThread

  Alt 6. Okt 2006, 17:31
N'Abend SirThornberry,

das stimmt. Es gibt evtl. sogar noch ein paar weitere Punkte an denen es zu Komplikationen kommen könnte z.B. hier, falls irgendein Ereignis zugewiesen ist.

if Assigned(FOnMessage) then FOnMessage(Msg, Handled); Aber man könnte sich ja das ProcessMessages für den TThread einfach selbst schreiben durch:

(verkürzt)

Delphi-Quellcode:
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin

  TranslateMessage(Msg);
  DispatchMessage(Msg);

end;
oder

(fast 1:1)

Delphi-Quellcode:
procedure MyProcessMessageImThread(var Msg: TMsg);
begin

  while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
  begin
    
    if Msg.Message <> WM_QUIT then // bekommt ein Thread vermutlich nie, aber gut
    begin

      // trifft alles für Threads normalerweise nicht zu
      {if not IsHintMsg(Msg) and not IsMDIMsg(Msg) and
       not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then}
 

        TranslateMessage(Msg);
        DispatchMessage(Msg);

    end;
  
  end;

end;
Ich denke, dann sollte es zu keinem Problem kommen.

Irgendwie kursiert wohl allgemein das Gerücht, dass ein TThread mit Application.ProcessMessages auch auf die Messages des Hauptthreads zugreift. Dies ist jedoch nicht richtig! Jeder Thread hat praktisch seine eigene MessageQueue. Mit diesem Vorurteil sollte einmal aufgeräumt werden.


Grüsse
...Doc
  Mit Zitat antworten Zitat