Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua任务调度_Lua - Fatal编程技术网

Lua任务调度

Lua任务调度,lua,Lua,我一直在为一个游戏编写脚本,这些脚本是用Lua编写的。游戏的一个要求是lua脚本中的Update方法(称为everyframe)运行的时间可能不会超过2-3毫秒,如果它运行了,游戏就会挂起 我用协程解决了这个问题,我所要做的就是调用Multitasking.RunTask(SomeFunction),然后任务作为协程运行,然后我必须在我的代码中分散Multitasking.Yield(),它检查任务运行了多长时间,如果超过2毫秒,它会暂停任务并在下一帧继续。这没关系,只是我必须将Multitas

我一直在为一个游戏编写脚本,这些脚本是用Lua编写的。游戏的一个要求是lua脚本中的Update方法(称为everyframe)运行的时间可能不会超过2-3毫秒,如果它运行了,游戏就会挂起

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

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


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

< P>检查代码> LuaaSethook < /C> >在

< P>我自己还没有尝试过这个解决方案,所以我不知道它会有多好。

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

我随意选了号码;它将不得不被调整,直到它大约是你需要的时间限制。请记住,在C函数等中花费的时间不会增加指令计数值,因此循环达到此限制的速度将远远快于对长时间运行的C函数的调用。设置一个低得多的值可能是可行的,而不是提供一个函数来查看OS的数量。(或)p>这看起来需要访问C++源代码。<代码>调试< /COD>库是从Lua导出的。您可以直接从Lua调用debug.sethook()。@Norman,太好了,这看起来很有希望@Javier,你能详细介绍一下如何使用它吗?我对C不太熟悉,所以文档有点神秘。这可能是最优雅的解决方案(事实上,我最初尝试过这个),但不幸的是它不起作用。看到这个讨论了吗