使用Lua创建一个定时器
2011-5-25 2:7:49
收藏:0
阅读:432
评论:6
我想使用Lua创建一个定时器,方式是我可以指定一个回调函数,在X秒后触发。
怎样最好地实现这一点?(我需要从Web服务器下载一些数据,每小时解析一到两次)
欢呼。
原文链接 https://stackoverflow.com/questions/6118799
点赞
stackoverflow用户44740
如果可以接受的话,你可以尝试 LuaNode。以下代码设置了一个计时器:
setInterval(function()
console.log("I run once a minute")
end, 60000)
process:loop()
2011-05-25 03:19:45
stackoverflow用户513763
如果不需要毫秒级准确度,你可以选择协程解决方案,在你的主循环结束时定期恢复它,像这样:
require 'socket' -- 用于拥有睡眠函数(也可以使用 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) -- 计时器从这里开始!
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 上选择任何其他的可用方案。
2011-05-25 09:05:36
stackoverflow用户2371030
使用 Script.SetTimer(interval, callbackFunction)
。
2013-05-10 17:56:20
stackoverflow用户364942
阅读了这篇帖子和其他帖子后,我决定使用Luv库。这是我的解决方案:
uv = require('luv') --luarocks install luv
function set_timeout(timeout, callback)
local timer = uv.new_timer()
local function ontimeout()
uv.timer_stop(timer)
uv.close(timer)
callback()
end
uv.timer_start(timer, timeout, 0, ontimeout)
return timer
end
set_timeout(1000, function() print('ok') end) --时间单位为毫秒
uv.run() --此处将会保持,直到所有计时器完成
2019-02-05 20:55:26
stackoverflow用户1267600
在我的 Debian 上,我安装了 lua-lgi 软件包来访问基于 GObject 的库。
下面的代码展示了一个演示,说明可以使用少量异步回调:
local lgi = require 'lgi'
local GLib = lgi.GLib
-- 获取处理所有事件的主循环对象
local main_loop = GLib.MainLoop()
cnt = 0
function tictac()
cnt = cnt + 1
print("tic")
-- 直到条件为真,该回调将被调用
return cnt < 10
end
-- 每 2 秒钟调用 tictac 函数一次
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 2, tictac)
-- 您还可以像这样使用匿名函数
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1,
function()
print("共有", cnt, "个 tic")
-- 该回调将永不停止
return true
end)
-- 设置完成后,您可以启动主循环
main_loop:run()
-- 下一步指令仍将被解释
print("主循环正在运行")
您可以在这里找到有关 LGI 的更多文档。
2020-04-07 10:32:06
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
请尝试使用
lalarm
: http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/示例(基于 src/test.lua):
-- alarm([secs,[func]]) alarm(1, function() print(2) end); print(1)
输出: