2011-05-25 97 views
6

我想創建一個使用Lua的計時器,通過這種方式我可以指定一個在X秒過後觸發的回調函數。使用Lua創建一個計時器

什麼是最好的方法來實現這一目標? (我需要從網絡服務器下載一些數據,每小時將解析一次或兩次)

乾杯。

回答

4

嘗試lalarm,在這裏: http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/

+0

你能否給我一個如何以簡單的方式使用鬧鐘來每分鐘撥打一個功能的例子? – Goles 2011-05-25 18:26:54

+0

你看過代碼嗎?在lalarm檔案中有一個「test.lua」文件。 – 2011-05-26 04:11:10

+0

是的,謝謝,我想我現在得到了這個例子。 – Goles 2011-05-27 02:35:31

0

如果它是你可以接受的,你可以嘗試LuaNode。下面的代碼設置一個計時器:

setInterval(function() 
    console.log("I run once a minute") 
end, 60000) 
process:loop() 
5

如果不需要milisecond準確,你可以只去一個協程解決方案,您定期恢復,就像在你的主循環的結束,就像這樣:

require 'socket' -- for having a sleep function (could also use os.execute(sleep 10)) 
timer = function (time) 
    local init = os.time() 
    local diff=os.difftime(os.time(),init) 
    while diff<time do 
     coroutine.yield(diff) 
     diff=os.difftime(os.time(),init) 
    end 
    print('Timer timed out at '..time..' seconds!') 
end 
co=coroutine.create(timer) 
coroutine.resume(co,30) -- timer starts here! 
while coroutine.status(co)~="dead" do 
    print("time passed",select(2,coroutine.resume(co))) 
    print('',coroutine.status(co)) 
    socket.sleep(5) 
end 

它使用在LuaSocket睡眠功能,你可以使用任何其他的Lua-users Wiki

1

使用Script.SetTimer建議的替代方案(間隔,callbackFunction參數)