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