3

os.time() 関数を使用してコード実行時間を測定し、LOVE フレームワークで表示しようとしています。しかし、驚いたことに、表示される時間が変わっています...私のコードは次のとおりです。

function foo()
    start_time = os.time()
        <some code>
    end_time = os.time()
    elapsed_time = os.difftime(end_time-start_time)
    love.graphics.print('start time: '   .. start_time .. 's', 12, 12)
    love.graphics.print('end time: '     .. end_time .. 's', 12, 22)
    love.graphics.print('time elapsed: ' .. elapsed_time .. 's', 12, 32)
end

グラフィックを開いたままウィンドウを離れると、時間が変化します (開始と終了が大きくなり、差が 1 と 2 の間で変化します)。また、アプリケーションの実行時間を測定する良い方法ですか?

4

3 に答える 3

6

startend時間が止まらない限り、常に成長しているはずです。

<some code>それらの間のデルタは、実行にかかる時間の関数として変化します。

os.time通常、過去の任意の時点 (通常は 1970 年 1 月 1 日 00:00:00) からの秒数を返します。それは保証されていません(そのような保証をしないCのtime機能に関して実装されています)。しかし、それは間違いなく常に前進しているはずです。


ところで、あなたはdifftime間違って使用しています。2 つの値を渡す必要があり、それらの差が得られます。あなたはそれに1つの値を渡しています。これについてdifftimeバーフする必要がありますが、代わりに最初の値を返しているように見えます。これは、実際には t2-t1であるマシンにいるため、偶然に機能します。他のシステムでは、これは壊れる可能性があります。呼び出しを次のように変更する必要があります。

elapsed_time = os.difftime(end_time,start_time)
于 2013-03-27T17:23:05.120 に答える
3
function foo()
    start_time = os.time()
        <some code>
    end_time = os.time()
    elapsed_time = os.difftime(end_time, start_time)
    love.graphics.print('start time: '   .. start_time .. 's', 12, 12)
    love.graphics.print('end time: '     .. end_time .. 's', 12, 22)
    love.graphics.print('time elapsed: ' .. elapsed_time .. 's', 12, 32)
end

まず、情報についてos.time()

戻り値は数値で、その意味はシステムによって異なります。POSIX、Windows、およびその他のシステムでは、この数値は、特定の開始時刻 (「エポック」) からの秒数をカウントします。他のシステムでは、意味は指定されておらず、time によって返される数値は、date と difftime の引数としてのみ使用できます。

ステップバイステップの繰り返し:

  1. start_time時刻を数値として格納します。
  2. コードの実行には時間がかかります。
  3. end_time現在時刻の数値を格納します。以上の数値になりますstart_time
  4. 時間差はos.difftime()call(構文的に間違っています) によって計算されます。

との値はstartendシステムがエポックから少し未来に進むにつれて、反復ごとに変更されます。また、 の値はelapsed_time1 秒または 2 秒として報告されています。これは、コード自体の実行にかかった時間です。


または、Lua を使用してos.clock()、コードの実行にかかった時間 (秒単位) を返すこともできます。

于 2013-03-27T18:39:43.543 に答える