2011-01-08 78 views
1

我正在寫一個GUI,可以讓最終用戶輕鬆定製。這些函數使用C++並從Lua調用。我試圖做一個Sleep()類型的函數來暫停腳本,但不是程序本身。睡眠Lua腳本沒有停止整個程序?

我能夠通過使用線程併爲每個函數製作一個函數來使它工作。但是,我希望它是一個單獨的功能。如同其中的一樣,它不是將它作爲CreateButton函數和其他函數的一部分,而只是具有延遲或休眠功能,只能停止腳本,而不是整個程序。

我是Lua的新手,我真的不知道該怎麼做。任何幫助表示讚賞。

+0

答案其實很簡單,但效率不高。我用C++創建了一個忙於等待的函數,在忙於等待的時候,我運行了更新GUI的函數。儘管如此,我仍然希望聽到任何人有更有效的答案。 – gdi 2011-01-08 18:27:47

回答

1

我會考慮使用協程和消息傳遞來製作狀態機。對待每個按鈕,就像傳入協程簡歷的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... 
0

爲了讓您的忙碌等待解決方案更高效,如何使用select()或類似的方法來等待一些GUI事件來處理,而不是旋轉?這似乎是您在GUI中需要做的事情,無論腳本方面如何。