Pisałem kilka skryptów do gry, scenariusze pisane są w języku Lua. Jednym z wymagań gry jest to, że metoda Aktualizacji w twoim skrypcie lua (która nazywa się każdą klatką) może trwać nie dłużej niż 2-3 milisekundy, jeśli gra się zawiesi.Planowanie zadania Lua
Rozwiązałem ten problem z Coroutines, wszystko, co muszę zrobić, to zadzwonić Multitasking.RunTask (SomeFunction), a następnie zadanie działa jako coroutine, muszę następnie rozproszyć Multitasking.Yield() w całym moim kodzie, który sprawdza, jak długo zadanie jest uruchomione, a jeśli jest to ponad 2 ms, zatrzymuje zadanie i wznawia je w następnej klatce. Jest to ok, z wyjątkiem tego, że muszę rozproszyć Multitasking.Yield() wszędzie w całym moim kodzie, i to jest prawdziwy bałagan.
Idealnie, mój kod automatycznie ulegałby wyczerpaniu, gdyby działał zbyt długo. Czy możliwe jest przyjęcie funkcji Lua jako argumentu, a następnie wykonanie jej linia po linii (może interpretacja Lua w Lua, co, jak wiem, jest możliwe, ale wątpię, czy to możliwe, jeśli wszystko, co masz, jest wskaźnikiem funkcji)? W ten sposób mogłem automatycznie sprawdzić czas pracy i wydajność, jeśli to konieczne, między każdą linią.
EDYTOWANIE: Aby było jasne, modyfikuję grę, co oznacza, że mam tylko dostęp do Lua. Żadne sztuczki C++ nie są dozwolone.
Wygląda na to, że wymaga dostępu do źródła C++? – Martin
to C, nie C++ – Javier
Biblioteka 'debugowania' jest eksportowana z Lua. Możesz wywołać 'debug.sethook()' bezpośrednio z Lua. –