Rubyのスリープまたは1秒未満の遅延?


149

1秒あたり24フレームでフレームをレンダリングする必要があるrubyを使用してスクリプトを作成していますが、コマンドを送信する間に1/24秒待機する必要があります。1秒未満で眠る最良の方法は何ですか?

回答:


202
sleep(1.0/24.0)

それが最善の方法であるかどうかについてのフォローアップの質問について:いいえ、各フレームのレンダリングにかかる​​時間が同じではない可能性があるため、スムーズでないフレームレートが得られる可能性があります。

次のいずれかの解決策を試すことができます。

  • 描画コードで1秒間に24回起動するタイマーを使用します。
  • できるだけ多くのフレームを作成し、フレームごとではなく、経過時間に基づいてモーションを作成します。

14
@Funkodebatすべての基本的なrubyランタイムがこれを行うと確信しています。
GeorgSchölly12年

2
@JosephSilvashy:Rubyインタープリターについての洞察はありませんが、Ruby mriはデフォルトではメモ化を行いません。しかし、ソースコードをバイトコードに変換するときに、この種の最適化が行われることを願っています。
GeorgSchölly2013年

8
DRY原則では、1.0 / 24.0の値を変数に抽出することをお勧めします。他のコードでもその値が必要になるため、重複を避けるために、中央の場所に保管する必要があります。パフォーマンスが副作用である場合、すばらしいです!
James Watkins

1
あなたは間違いなく定数を抽出すべきであり、「得ることができるすべてのパフォーマンス」という理由でそれを絶対に行わないでください
Blake

4
ただし、これは簡単な除算であり、フレームごとに1回実行されます。うまくいけば、フレーム自体のレンダリングは、計算の複雑さがはるかに大きくなります。これは時期尚早の最適化の素晴らしい例です。
アランH.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.