実際、睡眠には何の問題もありません。
QueryPerformanceCounter/QueryPerformanceFrequency の組み合わせを使用して、非常に正確なタイミングを取得できます。また、平均して、想定どおりに正確に進むループを作成できます。
デッドラインに 50 ミリ秒も遅れるスリープを見たことはありませんが、ドリフトする素朴なタイマーをたくさん見てきました。つまり、わずかな遅延を蓄積し、顕著な不規則な間隔を偶発的に更新します。これが不均一なフレームレートの原因です。
n:th フレームごとに非常に短いビープ音を鳴らすと、非常に聞き取りやすくなります。
また、ロジックとレンダリングは互いに独立して実行できます。CPU はそれほど忙しくないように見えるかもしれませんが、GPU は一生懸命働いているに違いありません。
さて、CPUを占有しないことについて。CPU 使用率は、特定のサンプルでプロセスが費やした CPU 時間の内訳です (スレッド スケジューラは実際にこれを追跡します)。ゲームのターゲットが 30 Hz の場合。フレームごとに 33 ミリ秒に制限されています。そうしないと、遅れが生じます (CPU が遅すぎるか、コードが遅すぎる)。このターゲットにヒットできない場合は、30 Hz で実行されず、33 ミリ秒未満でヒットした場合次に、プロセッサ時間を確保して、リソースを効果的に解放できます。
これはあなたにとっても興味深い読み物かもしれません。
余談ですが、時間を割く代わりに、将来の計算の準備作業を効果的に行うことができます。一部のゲームは、最も負荷が高くない場合でも、実際には並べ替えやメモリの最適化などの処理を実行します。