测量lua的经过时间(+ love2D)

Ola*_*a M 3 lua love2d

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

当我打开窗口打开我的图形时,时间正在改变(开始和结束增长,差异在1和2之间变化) - 所以第一个问题是如果os.time()返回一个数字,会发生什么.而且 - 这是衡量我的应用程序执行时间的好方法吗?

Mud*_*Mud 6

start并且end应该一直在增长,除非时间停止,在这种情况下,我们都遇到了麻烦.

它们之间的差异将<some code>根据执行的时间而变化.

os.time通常返回过去某个任意点的秒数(通常是1/1/1970 00:00:00).这是不能保证的(它是根据C的time功能实现的,没有这样的保证).但它肯定应该一直在推进,或者它并没有真正给你时间,对吧?


顺便说一句,你difftime错了.你应该传递两个值,它会给你它们之间的差异.你传递了一个值.它应该 barf,但它似乎返回第一个值,在你的情况下意外工作,因为你碰巧在一台difftime实际上是t2-t1 的机器上.在其他系统上,这可能会破裂.您应该将呼叫更改为:

elapsed_time = os.difftime(end_time,start_time)
Run Code Online (Sandbox Code Playgroud)


hjp*_*r92 5

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
Run Code Online (Sandbox Code Playgroud)

首先,有关信息os.time()

返回值是一个数字,其含义取决于您的系统。在 POSIX、Windows 和其他一些系统中,此数字计算自某个给定开始时间(“纪元”)以来的秒数。在其他系统中,没有指定含义,时间返回的数字只能用作 date 和 difftime 的参数。

逐步迭代:

  1. start_time将时间存储为数字。
  2. 您的代码执行需要一些时间。
  3. end_time存储现在时间的数值。它将是一个大于或等于 的数字start_time
  4. 时间差是通过os.difftime()call计算的(这在语法上是错误的)。

随着您的系统自纪元以来已经向未来前进了一点,start和的值将在每次迭代中发生变化。end此外, 的值elapsed_time被报告为 1 或 2 秒,这是代码执行自身所花费的时间。


您也可以使用 Luaos.clock()返回执行代码所花费的时间(以秒为单位)。