我不知道如何让 lua 执行任何常见的计时技巧,例如
我读过
while os.clock()<time_point do
--nothing
end
占用CPU时间。
有什么建议么?我是否缺少 API 调用?
UPDATE:我很久以前就写了这个问题,试图让 WOW Lua 按计划重播动作(即站立、等待 1 秒、跳舞、等待 2 秒、坐下。没有停顿,这些几乎都在同一四分之一秒内发生。)事实证明,WOW 故意禁用了几乎所有允许在时钟上执行操作的功能,因为它可能会破坏游戏或启用机器人。 https://stackoverflow.com/questions/1024960/how-do-you-make-a-combo-of-two-emotes-in-lua-in-world-of-warcraft-work?lq=1我想在时钟被拿走后重新创建一个时钟,我必须做一些疯狂的事情,比如创建一个工作数组(带有操作和执行时间),然后在一堆常见事件上注册一个事件处理程序,例如鼠标移动,然后在事件处理程序中处理任何到了时间的操作。事件处理程序实际上不会每 X 毫秒发生一次,但如果每 2-100 毫秒发生一次,那就足够接近了。遗憾的是我从未尝试过。
[我本来打算将此作为评论发布约翰·克罗马蒂 https://stackoverflow.com/questions/1034334/easiest-way-to-make-lua-script-wait-pause-sleep-block-for-a-few-seconds/1034394#1034394帖子,但没有意识到您不能在评论中使用格式。]
我同意。使用 os.execute() 将其放入 shell 肯定会起作用,但一般来说,进行 shell 调用的成本很高。包装一些 C 代码在运行时会快得多。在 Linux 系统上的 C/C++ 中,您可以使用:
static int lua_sleep(lua_State *L)
{
int m = static_cast<int> (luaL_checknumber(L,1));
usleep(m * 1000);
// usleep takes microseconds. This converts the parameter to milliseconds.
// Change this as necessary.
// Alternatively, use 'sleep()' to treat the parameter as whole seconds.
return 0;
}
然后,在 main 中执行以下操作:
lua_pushcfunction(L, lua_sleep);
lua_setglobal(L, "sleep");
其中“L”是你的 lua_State。然后,在从 C/C++ 调用的 Lua 脚本中,您可以通过调用以下命令来使用您的函数:
sleep(1000) -- Sleeps for one second
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)