Спать сценарий Lua, не останавливая всю программу? - PullRequest
2 голосов
/ 08 января 2011

Я пишу графический интерфейс, который должен быть легко настраиваемым конечными пользователями.Функции находятся в C ++ и вызываются из Lua.Я пытаюсь создать функцию типа Sleep (), которая будет приостанавливать работу сценария, но не самой программы.

Я смог заставить ее работать, используя потоки и создавая по одной для каждой функции.Однако я хочу, чтобы это была отдельная функция.Например, вместо того, чтобы включать его в функцию CreateButton и любую другую функцию, просто иметь функцию «Задержка» или «Спящий режим», которая останавливает только сценарий, а не всю программу.не знаю, как это сделать.Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Я бы хотел создать конечный автомат, используя сопрограммы и передачу сообщений.Обрабатывайте каждое нажатие кнопки как строку c ++, которая передается в резюме сопрограммы.Затем вы можете создать небольшой конечный автомат, который включает сообщение.Затем вы можете выполнить некоторую работу с пользовательским интерфейсом и затем перевести сопрограмму в режим сна, пока что-то не отправит ему другое сообщение.

Это очень удобно, если у вас есть конечный автомат, который выполняет пользовательский интерфейс.:

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 голос
/ 08 января 2011

Чтобы сделать ваше решение для ожидания занятости более эффективным, как насчет использования select() или аналогичного метода для ожидания некоторых событий графического интерфейса, а не вращения? Кажется, что-то, что вам нужно делать в графическом интерфейсе, независимо от сценариев.

...