Lua任务调度
2010-4-22 1:47:45
收藏:0
阅读:221
评论:2
我在写一些用Lua编写的游戏脚本。游戏有一个要求,你的lua脚本中的Update方法(在每个帧中调用)的运行时间不能超过2-3毫秒,否则游戏就会卡住。我通过协程解决了这个问题,只需要调用Multitasking.RunTask(SomeFunction),任务就作为协程运行,我只需在代码中分散使用Multitasking.Yield(),它会检查任务运行的时间,如果超过2毫秒,它会暂停任务,并在下一帧恢复它。这样是可以的,除了我不得不在我的代码中到处使用Multitasking.Yield(),而且非常混乱。理想情况下,我的代码应该在运行太长时间时自动yield。那么,是否可能以Lua函数的形式作为参数,然后逐行执行它(可能在Lua内部解释Lua,我知道这是可能的,但如果你只有一个函数指针,我很怀疑它是否可能)?这样一来,我可以在每一行之间自动检查运行时间并进行yield。编辑:明确一下,我正在制作游戏mod,这意味着我只能使用Lua。不能使用C++的技巧。
原文链接 https://stackoverflow.com/questions/2687526
点赞
stackoverflow用户147749
我还没有尝试过这个解决方案,所以我不确定它能否很好地工作。
debug.sethook(coroutine.yield,"",10000);
我随意选择了这个数字; 必须进行微调,直到大致满足您的时间限制。请记住,花费在C函数等中的时间不会增加指令计数值,因此循环会比调用长时间运行的C函数更快地达到此限制。设置一个更低的值并提供一个函数,以查看os.clock()或类似函数的增加量,可能是可行的。
2011-12-16 14:50:59
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
请查看调试接口中的
lua_sethook
。