しっかし今思うとメッセージループって本当にWindows3.1時代の産物だなーと思う
あれって要するにマイクロスレッドを実装するためのもんなんだよね。
Luaでいうcoroutine.yield()みたいな。
Windowsが巨大なマイクロスレッドの管理人だった。

Win32になってSleepが使えるようになってからは(擬似コードだけど)

for(;;)
{
 if( PeekMessage( &msg, ... ) )
  DispatchMessage( &msg );
 else
  Sleep(0);
}

みたいに昔のDOSみたいな調子で書ける
GetMessageという関数の内部実装だってきっとこんな感じだろーし。