2012-03-10 8 views
2

私はいくつかのプラットフォームで動作するはずのゲームを書いています。私はすべてのプラットフォームで良い時間精度が必要です。Pythonでクロスプラットフォームの高精度時間

私は今日の時間を知ることに興味がありません。私にとって重要なことは、2回の呼び出しの間の経過時間です。

ドキュメントを読んだ後、Linuxではtime.timeがよく表示され、Windowsではtime.clockがよく見えます。

import os 
import time 
__all__ = ['hrtime'] 

platform = os.name 
if platform == 'posix': 
    hrtime = time.time 
elif platform == 'nt': 
    hrtime = time.clock 
else: 
    # 'os2', 'ce', 'java', 'riscos' 
    raise ValueError("I have no idea what I'm doing.") 

しかし、どのような他のプラットフォームについて: 私はこのような何かを書くことを考えましたか? MacOSは{posix}を返しますか? cygwinはどうですか、それはLinuxかWindowsですか? 'ce'とは何ですか?私はこれらのプラットフォームをまったく気にする必要がありますか?

もう一つの選択肢は、pygameのSDL時間を使用することです。これはすべてのプラットフォームで1ミリ秒の精度を持つようです。レンダリングにSDLを使用しているので、私はそれを気にしません。しかし、私は今ネットワークコードに取り組んでいます。私のネットワークコードでSDL時間を使うのはちょっと奇妙です。

質問:あなたは何を使いたいのですが、なぜですか?

答えて

1

、あなたはそれを抽象化するためにpygameのダウンロードの機能を使用する必要があります。

をちょうどpygame.time.get_ticks()を呼び出す - それはpygame.init()

に呼び出してからのマイクロ秒を返します。他のプログラムを持っていることは珍しいことではありませんサウンド警告やキーボードの読書などのためのパイゲームからSDL機能を呼び出すマルチメディア指向のプログラムよりも、それを使用することに問題はありません。

1

私はいつもこれを使用し、問題に遭遇したことがない:

import sys 
import time 

if sys.platform == "win32": 
    # on Windows, the best timer is time.clock() 
    timerfunc = time.clock 
else: 
    # on most other platforms, the best timer is time.time() 
    timerfunc = time.time 

をそして、あなたはいくつかの他のプラットフォーム上でいくつかの問題に実行したい場合でも、それは後にコードを適応させるために、常に簡単です。

あなたが言及した理由のために、これはSDLを使用しないことを示唆しています。また、精度の向上(もしあれば)はおそらく目立たないでしょう。あなたはpygameのを使用しているので

1

(Python 3.3以降の)経過時間を測定するには、time.perf_counterを使用してください。

パフォーマンスカウンタの値(短時間の測定可能な最高解像度)を返します。それは睡眠中に経過した時間を含み、システム全体に及ぶ。戻り値の参照ポイントは定義されていないため、連続する呼び出しの結果の間の差異だけが有効です。

関連する問題