Как обрабатывается выполнение кода Lua при использовании LuaJava? - PullRequest
1 голос
/ 21 сентября 2011

Я намерен использовать LuaJava для запуска скриптов в моих приложениях Java / Android.

  • Когда я запускаю скрипт Lua, выполняется ли он в каком-то другом потоке?
  • Как мне управлять выполнением кода Lua, Как узнать, что скрипт завершил выполнение? Если я хочу, чтобы моя Java-программа ожидала завершения кода Lua, что мне тогда делать?

Моим первым предположением было использование некоторых семафоров и вызов обратных вызовов Java из Lua. Как мне сделать это правильно?

UPD с кодом

Java:

    LoadScript(final String filename) {
        this.luaState = LuaStateFactory.newLuaState();
        this.luaState.openLibs();
        this.luaState.LdoFile(filename);//launch Lua script to print lines
        printLines();// print Java lines
    }

    void printLines(){
        for(int i=0;i<100;i++)
            System.out.println("From java: "+i);
    }

Lua:

for i=0,100
  do
    print("From lua: ",i)
end

В консоли я вижу, что Java сначала печатает свои строки, а потом Lua.

1 Ответ

2 голосов
/ 21 сентября 2011

Когда я запускаю скрипт Lua, выполняется ли он в каком-то другом потоке?

номер

Вы будете знать, что сценарий "завершил" выполнение, когда будет выполнен следующий оператор Java после того, который вызывает в сценарий.


Это происходит потому, что они используют разные потоки для записи в стандартный вывод. У них разное поведение промывки, поэтому одно произойдет раньше другого. Но фактическое выполнение кода не является многопоточным.

Если вы хотите проверить это, просто сделайте, чтобы Lua-скрипт возвратил что-то, а затем ваш Java-код получил самое лучшее из стека. Это всегда будет то, что сгенерировал скрипт Lua.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...