首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luaj os.time()返回毫秒

Luaj os.time()返回毫秒
EN

Stack Overflow用户
提问于 2013-04-24 01:25:01
回答 4查看 6.5K关注 0票数 3

Luaj中的os.time()以毫秒为单位返回时间,但根据lua文档,它应该以秒为单位返回时间。

  1. 这是卢阿杰的窃听器吗?
  2. 你能提出一个解决办法吗?它将适用于Luaj(用于java)和真正的Lua(c/c++)?因为我必须对两个应用程序使用相同的lua源代码。(不能简单地用1000除以它,因为它们都有不同的时间尺度)

在我的lua文件中的示例:

代码语言:javascript
复制
local start = os.time()
while(true) do
    print(os.time() - start)
end

在c++中,我收到了输出:

代码语言:javascript
复制
1
1
1
...(1 seconds passed)
2
2
2

在java (使用Luaj)中,我得到了:

代码语言:javascript
复制
1
...(terminate in eclipse as fast as my finger can)
659
659
659
659

喂,我在窗户上试试这个

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-24 05:28:30

关于os.time()的Lua手册:

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

因此,任何Lua实现都可以自由地更改os.time()值的含义。

票数 2
EN

Stack Overflow用户

发布于 2013-04-24 11:16:23

是的,卢阿吉有个窃听器。

当调用System.currentTimeMillis() ()时,实现只返回os.time。它真的应该返回类似于(long)(System.currentTimeMillis()/1000.)的东西

还值得指出的是,luaj中的os.date和os.time处理几乎完全缺失。我建议您假设它们尚未实现。

票数 10
EN

Stack Overflow用户

发布于 2013-04-24 16:31:40

似乎您已经确认了这是LuaJ中的一个bug;至于解决方法,您可以用自己的版本替换os.time():

代码语言:javascript
复制
if (runningunderluaj) then
  local ostime = os.time
  os.time = function(...) return ostime(...)/1000 end
end

其中,runningunderluaj可以检查只在luaj下设置的全局变量。如果这是不可用的,您可能可以通过比较对os.clockos.time的调用的结果来进行自己的检查,这两个调用可以度量时间差:

代码语言:javascript
复制
local s = os.clock()
local t = os.time()
while true do
  if os.clock()-s > 0.1 then break end
end
-- (at least) 100ms has passed
local runningunderluaj = os.time() - t > 1

注意:有可能os.clock()也是“坏的”。我不能用luaj来测试这个..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16181858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档