J'ai écrit quelques scripts pour un jeu, les scripts sont écrits en Lua. L'une des exigences du jeu est que la méthode Update dans votre script lua (appelée chaque frame) ne dure pas plus de 2-3 millisecondes, si le jeu s'arrête. J'ai résolu ce problème avec les coroutines, tout ce que j'ai à faire est d'appeler Multitasking.RunTask (SomeFunction), puis la tâche fonctionne comme une coroutine, puis je dois disperser Multitasking.Yield() dans mon code, qui vérifie comment La tâche a été exécutée depuis longtemps et, si elle dépasse 2 ms, elle interrompt la tâche et la reprend à la prochaine image. C'est ok, sauf que je dois disperser Multitasking.Yield() partout tout au long de mon code, et c'est un vrai bordel.Lua tâche ordonnancement
Idéalement, mon code céderait automatiquement s'il fonctionnait trop longtemps. Alors, est-il possible de prendre une fonction Lua comme argument, puis de l'exécuter ligne par ligne (peut-être interpréter Lua dans Lua, ce que je sais est possible, mais je doute que ce soit possible! De cette façon, je pourrais vérifier automatiquement l'exécution et céder si nécessaire entre chaque ligne.
EDIT :: Pour être clair, je modding un jeu, ce qui signifie que je n'ai accès qu'à Lua. Pas d'astuces C++ autorisées.
Cela semble avoir besoin d'un accès à la source C++? – Martin
c'est C, pas C++ – Javier
La bibliothèque 'debug' est exportée de Lua. Vous pouvez appeler 'debug.sethook()' directement à partir de Lua. –