>>メッセージループって回りっぱなしなんですね。

無駄に実行することがないように、GetMessage() では、キューにメッセージが
入るまではサスペンデッドになりますね。VCLでは OnIdle を呼ぶために、
PeekMessage() と WaiteMessage() でやはり無駄な実行を防いでいます。

ですから、あまり空回りはしてませんよ。