Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lua_State * wielowątkowość.
#1
Cześć, To jest temat o Lua. Moim głównym celem jest stworzenie sztucznej inteligencji opartej na lua.   Wstrzyknąłem moją bibliotekę DLL w jednej [grze]. Zastosowałem kilka haków, zaczepiłem lua_pcall i przechwyciłem lua_State *.   Teraz jestem szczęśliwy i mogę wykonywać dowolne polecenia z moją własną statycznie powiązaną biblioteką lua lib, jak zwykle koder lua.   Coś jak       Kod:   auto result = ingame_lua_state. doString (polecenie); if (result) {string error = ingame_lua_state. getString (- 1); logger_ -> error ("Nie udało się uruchomić polecenia w środowisku gry, błąd [% v]", błąd); ingame_lua_state. pop (- 1); return 0; } else {logger_ -> trace ("Wykonano polecenie"); }   Nie martw się o składnię, używam opakowania LuaIntf.   Wszystko działa dobrze, ale czasami dowolne polecenie, również udane polecenie, losowo może spowodować awarię klienta gry.   Nie znam dokładnego powodu. Ale myślę, że gra-lua-engine używa lua_State * w tym samym czasie co I. Które powodują lua stosu i awarii.   Próbuję wykonać mój kod w środowisku gry i zwrócić zmienne z gry lua stack do mojego własnego stosu lua, ale podczas tego kroku widzę, że zmienne losowe pojawiają się w grze lua stack.   Pierwsze pytanie. Czy mam rację? To jest problem? Drugie pytanie. Jak rozwiązać? Myślę, że nie mogę stworzyć muteksu, ponieważ będzie działał tylko dla mojego kodu (wątki gry będą nadal używać lua_State)
Reply
#2
podpisz funkcję gry i wykonaj swój kod lua w tym wątku, w ten sposób twoja lua zostanie wykonana, gdy gra nie wykonuje swojej lua
Reply
#3
więc na przykład: Podłączyłem funkcję "loadstring". Wewnątrz metody objazdu, będę wykonywać mój kod lua? ale ja też potrzebuję pcall. W każdym razie, mogę zadzwonić do pcall wewnątrz objazdu, ale jeśli będę używał w ten sposób, nie mogę wykonać kodu lua, kiedy chcę, muszę poczekać, kiedy gra go wykona? Dobrze?
Reply
#4
Nadal próbuję znaleźć sposób na prawidłowe wykorzystanie przechwyconego lua_State *. Znam sztuczną inteligencję, która działa w ten sposób - więc jest to możliwe. Myślę, że muszę wykonać mój kod z innego wątku, wszelkich pomysłów lub wskazówek?
Reply
#5
myślę, że ma na myśli to, że powinieneś podłączyć funkcję, która jest często nazywana (jak na przykład lua_gettop) i w twoim wywołaniu luki lua_loadstring i lua_pcall
Reply
#6
Cóż, dziękuję, teraz działa dobrze z często nazywaną funkcją
Reply




Users browsing this thread: 1 Guest(s)