睡眠Lua脚本没有停止整个程序?

时间:2011-01-08 02:23:01

标签: lua sleep

我正在编写一个可以让最终用户轻松定制的GUI。这些函数是用C ++编写的,从Lua调用。我正在尝试创建一个Sleep()类型的函数来暂停脚本而不是程序本身。

我能够通过使用线程并为每个函数创建一个来使其工作。但是,我希望它是一个单独的功能。就像在,而不是让它成为CreateButton函数和其他所有函数的一部分,只需要一个延迟或休眠功能,只停止脚本,而不是整个程序。

我是Lua的新手,我真的不知道怎么回事。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

我会研究使用协同程序和消息传递来创建状态机。将每个按钮视为一个c ++字符串,将其传递到协程恢复中。然后,您可以构建一个可以打开消息的小型状态机。然后,您可以执行一些UI工作,然后将协同程序重新置于睡眠状态,直到某些内容向其发送另一条消息。

如果您有一个执行UI的状态机,这非常方便。

伪代码:

c_obj:wait_for_message("mouse_down");
local message = coroutine.yield();
if(message == "mouse_down") then
  update draw function.
end
c_obj:wait_for_message("mouse_up");
local message = coroutine.yield();
if(message == "mouse_up") then
  Update UI..
  update draw function.
end 
etc...

答案 1 :(得分:1)

为了让您的忙碌等待解决方案更有效率,如何使用select()或类似方法等待一些GUI事件处理,而不是旋转?无论脚本方面如何,这似乎都是您需要在GUI中执行的操作。