回答:
いいえ、ちがいます。スリープは最低限のスリープ時間のみを保証しますが、実際にはそれ以上の任意の時間だけスリープする場合があります。タイマーの解像度(timeBeginPeriodで設定)も重要です。タイマーに他の何か(QueryPerformanceCounterなど)を使用している場合でも、スリープを制御するにはtimeBeginPeriodが必要です。
要約すると:
スリープを使用するための唯一の合理的なケースは、モバイルデバイスなどのCPU使用率を削減したい場合です。それでも、スリープ(1)を使用することになります。フレームレートを制御するためにそれを使用することは、進むべき方法ではありません。
vsyncを強制的にオンにすることは、おそらく固定フレームレートを取得するための一般的な方法の1つですが、それでも、異なるハードウェアは異なるリフレッシュレートで実行され、異なるマシン間で一貫した固定フレームレートを持つことはできません(これはどのようなハードウェアによって異なりますもちろんターゲティングしています)。
この時点で、この記事に言及する必要があります:Gaffer On Games-Fix Your Timestep!。これは、シミュレーションで一貫したタイムステップを取得するために必要な手順を説明しています。
簡単な答え:いいえ、違います。
フレームレートを固定するには、特定のフレームレートを強制する特定のコールバック関数を呼び出す必要があります。明らかに、ループ内の1回の反復にどれだけの時間がかかるかがわからなければ、固定スリープ時間を設定できません。
GLUTはglutTimerFunc()を提供します。これは、OpenGLでプログラミングしている場合、必要な適切な関数です。この例、またはこれを見てください。
Sleep
ますか?