2011-05-25 95 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参数)