在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
当我离开显示我的图形的窗口时,时间会变化(开始和结束越来越长,并且差异在1和2之间变化)-所以第一个问题是,如果os.time()返回一个数字,那么这是如何发生的。而且-这是衡量应用程序执行时间的好方法吗?
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 和一些其他系统中,这个数字表示自某个指定起始时间("纪元")以来经过的秒数。在其他系统中,其含义未被指定,而时间返回值只能用作参数向 date 和 difftime。
逐步迭代:
start_time存储时间作为数字。- 你的代码需要一些时间来执行。
end_time存储目前的时间数值。它将会是大于等于start_time的数值。- 使用
os.difftime()(其语法错误)来计算时间差异。
start 和 end 的值将随着每次迭代而改变,因为你的系统已经在时间轴上向前移动了一点点。此外,elapsed_time 的值被报告为 1 或 2 秒,这是你的代码执行所需要的时间。
你还可以使用 Lua 的 os.clock() 来返回执行你的代码所需的时间(以秒为单位)。
尝试使用[love.timer.getTime](https://love2d.org/wiki/love.timer.getTime),自0.9.0起返回微秒精度的时间。该链接中提供了如何计时的示例。
对于相对时间(通过减法比较),这是可以的。如果您想要更准确的绝对时间,请尝试以下方式:
do
local _getTime = love.timer.getTime
local initialTime = _getTime()
function appTime()
return _getTime() - initialTime
end
end
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
start和end应该始终增加,除非时间停止,否则我们都有麻烦了。它们之间的差值将根据执行某些代码的时间
<some code>的长短而改变。os.time通常返回自过去某一点(通常是 1970 年 1 月 1 日 00:00:00)以来的秒数。虽然不能保证这一点(它是基于 C 的time函数实现的,该函数没有这样的保证),但它应该始终在增加,否则它实际上没有给你时间,对吧?顺便说一句,你使用
difftime的方法不对。你应该传递两个值,它会给出它们之间的差值,而你只传递了一个值。它本应该崩溃的,但在你的情况下它似乎返回了第一个值,这是因为你碰巧在一台difftime实际上是 t2-t1 的机器上,而在其他系统上,这可能会出问题。你应该更改调用为:elapsed_time = os.difftime(end_time,start_time)