Lua任务调度

时间:2010-04-22 00:46:16

标签: lua

我一直在为游戏编写一些脚本,脚本是用Lua编写的。游戏的要求之一是你的lua脚本中的Update方法(每帧调用一次)可能需要不超过2-3毫秒才能运行,如果游戏刚刚挂起的话。

我用协同程序解决了这个问题,我所要做的就是调用Multitasking.RunTask(SomeFunction)然后任务作为协程运行,然后我必须在我的代码中分散Multitasking.Yield(),这会检查多长时间任务一直在运行,如果超过2毫秒,它会暂停任务并在下一帧重新开始。这没关系,除了我必须在我的代码中将Multitasking.Yield()到处分散,这真是一团糟。

理想情况下,我的代码会在运行时间过长时自动生成。那么,是否有可能将Lua函数作为参数,然后逐行执行(也许在Lua中解释Lua,我知道这是可能的,但我怀疑如果你拥有的只是一个函数指针可能)?通过这种方式,我可以自动检查运行时并在必要时在每一行之间产生。

编辑::要清楚,我正在修改游戏,这意味着我只能访问Lua。不允许使用C ++技巧。

2 个答案:

答案 0 :(得分:5)

检查Debug Interface中的lua_sethook

答案 1 :(得分:1)

我自己还没有尝试过这个解决方案,所以我不确定它的效果如何。

debug.sethook(coroutine.yield,"",10000);

我随意挑选了这个号码;它将不得不被调整,直到它大致是你需要的时间限制。请记住,在C函数等中花费的时间不会增加指令计数值,因此循环将比调用长时间运行的C函数更快地达到此限制。设置一个更低的值可能是可行的,而是提供一个函数,可以看到os.clock()或类似的增加了多少。