如何在不停止整个程序的情况下使 Lua 脚本休眠?

我正在编写一个 GUI,旨在通过终端用户轻松定制。这些功能是使用 C++ 编写的,并从 Lua 调用。我正在尝试创建一个类似于 Sleep() 的函数,它将暂停脚本但不会暂停整个程序。

我使用线程让每个功能都能正常工作。然而,我希望它成为一个独立的功能。也就是说,不要让它成为 CreateButton 函数或其他任何函数的一部分,只是简单地拥有一个 Delay 或 Sleep 函数,它只会停止脚本,而不是整个程序。

作为 Lua 的新手,我真的不知道该如何处理这个问题。非常感谢您的帮助。

原文链接 https://stackoverflow.com/questions/4632012

点赞
stackoverflow用户4323
stackoverflow用户4323

为了使你的繁忙等待方案更加高效,如何使用 select() 或类似的方法等待某些 GUI 事件处理,而不是不停地运行?似乎这是你无论脚本方面都要做的 GUI 功能。

2011-01-08 20:07:42
stackoverflow用户560839
stackoverflow用户560839

我建议使用协程和消息传递来构建状态机。将每个按钮按下的操作看作一个传递到协程恢复中的 C++ 字符串。然后你可以建立一个小的状态机,以消息为切换条件。你可以进行一些 UI 工作,然后将协程暂停,直到有消息再次唤醒它。

如果你的状态机正在处理 UI 方面,那么使用这种方法非常方便。

伪代码:

c_obj:wait_for_message("mouse_down");
local message = coroutine.yield();
if(message == "mouse_down") then
  更新绘制函数。
end
c_obj:wait_for_message("mouse_up");
local message = coroutine.yield();
if(message == "mouse_up") then
  更新 UI……
  更新绘制函数。
end
等等……
2011-01-11 03:16:32