Ich weiß jetzt nicht, ob es an der Delphi-Version liegt, aber in 10.4 wird
CheckSynchronize nur in
Idle aufgerufen - nicht in
ProcessMessages.
Idle wird allerdings in
HandleMessage aufgerufen falls keine Message vorliegt. Das ist die Methode, die in einer Dauerschleife in
Application.Run aufgerufen wird. Das bedeutet aber nicht, dass ständig
Idle aufgerufen wird. Bei
Done = True wird am Ende von
Idle ein
WaitMessage aufgerufen.
Zitat:
The WaitMessage function suspends the thread and does not return until a new message is placed in the thread's message queue.
Zu häufige
Idle-Events (z.B. in manchen
MDI-Apps) kann man übrigens mit
Application.ActionUpdateDelay bändigen.
Es gibt noch ein paar andere Events, die CheckSynchronize mittels WM_NULL auslösen, aber die sind hier eigentlich nicht von Belang.