Игры (в большинстве случаев) являются симуляторами. Традиционно это означает, что вы обновляете симуляцию, представляете ее текущее состояние (например, визуализируете графику) и повторяете. Естественным представлением для этого является цикл.
С другой стороны, насос сообщений Win32 - это особенность платформы, ориентированная на приложения, управляемые событиями, которые составляют большинство приложений в Windows. Это ни в коем случае не стандарт для приложений на всех платформах, поэтому неудивительно, что не все программное обеспечение хорошо вписывается в модель. Таким образом, чтобы изменить типичную программу для соответствия модели Win32, вы обычно расходуете эту очередь за один раз, один раз за итерацию цикла, используя PeekMessage до тех пор, пока она не станет пустой. Или вы помещаете эту логику в отдельный поток и, при необходимости, используете GetMessage.
Для большинства игр, ориентированных на производительность, другого практического способа сделать это не существует. Во-первых, если вы пытаетесь сделать игру управляемой событиями, а не опрашиваемой, вам потребуется более высокое разрешение по времени, чем может дать вам Windows, если вы хотите сохранить высокую производительность, к которой стремятся многие игры. Во-вторых, Windows - это только одна из платформ, для которых написаны игры, и переработка игры, чтобы она вписалась в модель Win32, будет просто неудобством для специализированных игровых платформ, которые вместо этого ожидают канонический игровой цикл.
Наконец, проблемы с «взятием 100% CPU» неуместны. Большинство современных игр предназначены для использования в полноэкранном режиме с эксклюзивным аппаратным доступом, а не просто как одно из нескольких сосуществующих приложений. Клиенты таких игр на самом деле требуют, чтобы игра максимально использовала их аппаратное обеспечение, и это невозможно сделать, если имеются преднамеренные вызовы Sleep (), или обновления зависят от внешних таймеров, запускающих приложение N раз в секунду. Очевидно, есть исключения для многих игр, например. те, которые предназначены для запуска в основном в окне, но важно отметить различие.