我正在尝试使用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()返回一个数字,会发生什么。而且 - 这是衡量我的申请执行时间的好方法吗?
答案 0 :(得分:6)
start
和end
应该一直在增长,除非时间停止,在这种情况下,我们都遇到了麻烦。
它们之间的差异将随<some code>
执行的时间而变化。
os.time
通常会返回过去某个任意点(通常是1/1/1970 00:00:00)的秒数。这不保证(它是用C的time
函数which makes no such guarantees实现的)。但它肯定应该一直在推进,或者它并没有真正给你时间,对吗?
difftime
错了。你应该传递两个值,它会给你它们之间的差异。你传递了一个值。它应该 barf,但它似乎返回了第一个值,在你的情况下意外工作,因为你碰巧在difftime
实际上是t2-t1的机器上。在其他系统上,这可能会破裂。您应该将呼叫更改为:
elapsed_time = os.difftime(end_time,start_time)
答案 1 :(得分:2)
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和其他一些系统中,这个数字计算在内 一些给定的开始时间(“epoch”)以来的秒数。其他 系统,未指定含义,以及按时间返回的数字 只能用作date和difftime的参数。
逐步迭代:
start_time
将时间存储为数字。end_time
现在存储时间的数值。它将是一个大于或等于start_time
的数字。os.difftime()
电话(which is syntactically wrong)计算。每次迭代都会更改start
和end
的值,因为您的系统自epoch以来已经向前推进了一点点。此外,elapsed_time
的值报告为1或2秒,这是您的代码自行执行所需的时间。
您也可以使用Lua的os.clock()
来返回执行代码所需的时间(以秒为单位)。
答案 2 :(得分:2)
尝试love.timer.getTime,从0.9.0开始,返回微秒级的准确时间。该链接有一个如何计时的例子。
对于相对时间(减去比较)是可以的。如果您想要更多的绝对时间,请尝试以下方法:
do
local _getTime = love.timer.getTime
local initialTime = _getTime()
function appTime()
return _getTime() - initialTime
end
end