2013-04-24 376 views
3

Luaj中的os.time()以毫秒爲單位返回時間,但根據lua文檔,它應該以秒爲單位返回時間。Luaj os.time()返回毫秒

  1. 這是Luaj中的錯誤嗎?
  2. 你能提出一個可以和Luaj(用於java)和真正的Lua(c/C++)一起工作的解決方法嗎? 。因爲我必須使用兩個應用程序相同的LUA源(不能簡單地用1000除以它,因爲它們都具有返回不同的時間尺度)

例如在我的LUA文件:

local start = os.time() 
while(true) do 
    print(os.time() - start) 
end 

在C++,我接收到的輸出:

1 
1 
1 
...(1 seconds passed) 
2 
2 
2 

在Java(使用Luaj),我得到:

1 
...(terminate in eclipse as fast as my finger can) 
659 
659 
659 
659 

僅供參考,我嘗試在Windows操作系統上

+0

os.time()返回以秒爲單位的時間。您可能會將*單位*與*精度*混淆。 '12.423'是以秒爲單位的時間,精確到毫秒。 – 2013-04-24 01:26:58

+0

os.time()**應該**以秒爲單位返回時間。但在** Luaj **中,它會以毫秒爲單位返回(我認爲,至少當我將其更改爲1000時,感覺就像是第二次) – bysreg 2013-04-24 01:29:51

+1

您能舉一個例子嗎?我認爲它會在幾秒鐘內返回時間,但精度達到毫秒級,並且您看到精度並與單位混淆。 – 2013-04-24 01:37:54

回答

2

約os.time的Lua手動():

返回的值是一個數字,其含義取決於你的系統。在POSIX,Windows和其他一些系統中,這個數字計算自某些給定開始時間(「時代」)以來的秒數。在其他系統中,沒有指定含義,並且按時間返回的數字只能用作os.date和os.difftime的參數。

因此,任何Lua實現都可以自由更改os.time()值的含義。

+0

以上的問題中添加了代碼示例「...在POSIX,** Windows **和其他一些系統中,......統計**秒數**」,對不起,我應該提到我的系統是什麼。我使用窗戶。所以它應該返回秒數的權利? – bysreg 2013-04-24 05:44:42

+0

以及您對解決方法有何建議? – bysreg 2013-04-24 05:45:20

+1

@bysreg - 有關POSIX,Windows的文字僅限於香草Lua。 Luaj不適用於Windows,它適用於Java。 ;-) – 2013-04-24 05:52:40

10

是的,luaj有一個錯誤。

當您調用os.time()時,實現僅返回System.currentTimeMillis()。它應該真的返回像(long)(System.currentTimeMillis()/1000.)

還值得指出的是,luaj中的os.date和os.time處理幾乎完全沒有。我建議你假設他們還沒有實現。

+0

在搜索代碼後檢查你的語句,我證實luaj實現使用System.currentTimeMillis()for os.time()的實現(你可以在OsLib.java第308行中看到它) – bysreg 2013-04-24 16:38:13

2

看起來好像您已經確認它是LuaJ中的一個錯誤;作爲變通方法,您可以用自己的版本替換os.time():

if (runningunderluaj) then 
    local ostime = os.time 
    os.time = function(...) return ostime(...)/1000 end 
end 

其中runningunderluaj可以檢查是隻有在luaj設置一些全局變量。如果這是不可用的,你或許可以拿出你自己的支票通過比較調用os.clockos.time衡量時間差的結果:

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來測試這...

+0

'os.clock()'返回程序使用的CPU時間**數量的近似值。 – hjpotter92 2013-04-24 17:00:05

+0

@ hjpotter92,正確,但它具有ms精度,因此計算delta應該沒問題。 – 2013-04-24 21:41:07

1

在luaj-3.0-beta2中,這已被固定爲以秒爲單位的返回時間。

這是luaj到luaj-3.0-beta1之前的所有版本中的一個bug。