2011-01-08 6 views
1

저는 최종 사용자가 쉽게 사용자 지정할 수있는 GUI를 작성하고 있습니다. 함수는 C++에 있으며 루아에서 호출됩니다. 스크립트를 일시 중지하지만 프로그램 자체를 일시 중지하는 Sleep() 유형 함수를 만들려고합니다.전체 프로그램을 중단하지 않고 수면 루아 스크립트?

스레드를 사용하고 각 기능마다 하나씩 만들어서 작동시킬 수있었습니다. 그러나 나는 그것을 개별적인 기능으로하고 싶다. 마찬가지로, CreateButton 함수와 다른 모든 함수의 일부가 아닌, 전체 프로그램이 아니라 스크립트 만 중단시키는 지연 또는 절전 기능이 있습니다.

루아에서 초보자 인 나는 정말로 이것에 대해 어떻게 해야할지 모르겠다. 어떤 도움을 주셔서 감사합니다.

+0

는 대답은 실제로 매우 간단했다. 바쁜 대기 시간과 함께 C++에서 함수를 만들었고 바쁜 대기 시간 안에 GUI를 업데이트하는 함수를 실행했습니다. 나는 아직도 사람이 더 효율적인 대답을 가지고 있는지 듣고 싶습니다. – gdi

+0

왜 스크립트를 잠자고 싶습니까? 그것으로 무엇을 이루고 싶습니까? –

+0

늦게 답변 해 주셔서 감사합니다. 나는 단지 전체 프로그램이 아닌 루아 스크립트에만 영향을 미치는 간단한 Sleep() 함수를 만들려고하고있다. 기본적으로, 루아 스크립트는 CreateWindow (texture, x, y, width, height) RotateWindow (45)처럼 보이는 C++ 함수를 사용할 것입니다. Sleep() 함수를 만들어서 최종 사용자가 창 만들기와 창 회전 사이에 일시 중지, 우리는 전체 프로그램을 방해하지 않고 그것을 할 수 있습니다. – gdi

답변

1

나는 coroutines와 message passing을 사용하여 상태 머신을 만들 것이다. 각 버튼을 코 루틴 이력서로 전달되는 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에서해야 할 일처럼 보입니다.

관련 문제