Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Synchronize und die Messagequeue

  Alt 2. Jan 2010, 19:33
Hallo,

erstmal Danke für die Antwort.

In der Tat erreicht die Message "WM_NULL" niemals die Messagequeue des TApplication-Objekts. Dort steht:

Delphi-Quellcode:
WM_NULL:
  CheckSynchronize;
Diese Zeile wird nie Aufgerufen!

Zusätzlich wird "CheckSynchronize" nach jeder verarbeiteten Message (Also in Application.Idle) aufgerufen - das ist das, was ich durch bewegen der Maus auslöse.

Ersetzen der Zeile
Delphi-Quellcode:
procedure TApplication.WakeMainThread(Sender: TObject);
begin
  PostMessage(Handle, WM_NULL, 0, 0);
end;
Durch
Delphi-Quellcode:
const
  WM_SYNCHRONIZE_THREADS = WM_USER + 1187;

PostMessage(Handle, WM_SYNCHRONIZE_THREADS, 0, 0);
bringt leider keine Besserung. Die Message wird gar nicht empfangen. Sende ich die Message jedoch an Form1.Handle und nicht TApplication.Handle, so funktioniert das Ganze. Hat jemand eine Erklärung für dieses Verhalten?
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat