2017-07-16 5 views
0

一般的には、タイミング/待機メカニズムとしてwhileループを使用することをお勧めします。高い精度が必要な場合は、ブロックする必要があるのはわずか数ミリ秒です。タイミング機構としてwhileループを使用することはできますか?

私は現在、Java/Scalaでゲームループを作成していますが、この問題は特定の状況を対象としていません。私はそれを理解するいつもは良いアイデアかどうかという状況に依存しますが、合理的な状況で合理的に良いアイデアになるかどうか尋ねています。

EDIT:

あなたはそれが悪いアイデアであると考えられる場合は、精度の高い量を維持する代替手段を提供してください。単純にシステムタイマーを使用すると、(少なくともJavaの場合は)巨大なバリエーションを得ることができます。

+0

私は言いませんでした...計算の遅れは何もなかったので使用されましたが、今日ではCPUの速度ごとにバージョンを作成する必要があるので非常に悪いです。そして、他のプログラムがサイクルを取っている場合、それは流暢ではありません。 – maraca

+0

数ミリ秒はプロセッサにとって膨大な時間です。大きな遅延が必要な場合は、スレッドをスリープ状態にする必要があります。スピニングはOKで、しばしばCPUをあきらめたくない小さな時間間隔では優先されます。 – PSkocik

答えて

1

実行時間は一定ではなく、CPU速度、OS(CPUのタイムシェアリングが異なる結果をもたらす)などの多くの要素に依存します。さらに、10e9サイクル/秒、ミリ秒を実行できるマシンも時間の経過とともに膨大です。タイマーは非常に悪い考えですが、代わりにあなたの言語やOSのタイマーを使ってみてください。

3

実行を遅らせるためのループを作成することは、CPUを消費するためスレッドを遅延させる最悪の方法の1つです。それをする代わりに、あなたは使用することができます:

Thread.sleep(milliseconds); 

CPUをまったく消費しません。しかし、スレッドを扱う関数は絶対に正確ではないので、sleep関数の引数で指定した時間は入力した時間よりも少し時間がかかることがありますが、それは無視しやすいほどです。

関連する問題