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 之间变化) - 所以第一个问题是,如果 os.time() 返回一个数字,这将如何发生。而且 - 这是衡量我的应用程序执行时间的好方法吗?

4

3 回答 3

6

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

它们之间的增量将<some code>根据执行所需的时间而变化。

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


顺便说一句,你用difftime错了。您应该将两个值传递给它,它会为您提供它们之间的差异。您正在传递一个值。它应该对此嗤之以鼻,但它似乎正在返回第一个值,在你的情况下它意外地起作用,因为你碰巧在一台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 和其他一些系统中,此数字计算自给定开始时间(“纪元”)以来的秒数。在其他系统中,没有指定含义,时间返回的数字只能用作日期和差异时间的参数。

逐步迭代:

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

start和的值end将随着您的系统自 epoch 以来向未来发展一点点而随着每次迭代而改变。此外, 的值elapsed_time被报告为 1 或 2 秒,这是您的代码执行自身所花费的时间。


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

于 2013-03-27T18:39:43.543 回答
2

试试love.timer.getTime,它从 0.9.0 开始返回微秒精度的时间。该链接有一个如何计时的例子。

相对时间可以(减去比较)。如果您想要更多绝对时间,请尝试以下操作:

do
    local _getTime = love.timer.getTime
    local initialTime = _getTime()

    function appTime()
        return _getTime() - initialTime
    end
end
于 2014-03-16T22:10:00.253 回答