Programme laufen nicht durchgehend.
Sie werden über den Task Scheduler immer mal wieder angehalten, bzw. sie bekommen nur abechselnd ein paar Millisekunden lang Rechenzeit.
Wenn Windows das Programm kurz vor dem Messen schlafen legt, dann kann man die berechnete Pause so klein machen, wie man will ... die Messung geschieht erst bei der nächsten Bearbeitung und das kann unterschiedlich lang mehrere Millisekunden dauern, je nach Systemauslastung und Priorisierung.
Auch braucht das Verarbeiten der Messages (egal ob
NonVCL oder über ProcessMessages) auch seine Zeit, sodaß man die Schleife sowieso nicht immer ganz geneu abbrechen kann.