Tôi đã viết một số tập lệnh cho một trò chơi, các tập lệnh được viết bằng Lua. Một trong những yêu cầu của trò chơi là phương thức cập nhật trong kịch bản lệnh lua của bạn (được gọi là mọi khung hình) có thể mất không quá 2-3 mili giây để chạy, nếu trò chơi đó bị treo. Tôi đã giải quyết vấn đề này với coroutines, tất cả những gì tôi phải làm là gọi Multitasking.RunTask (SomeFunction) và sau đó nhiệm vụ chạy như một coroutine, sau đó tôi phải phân tán Multitasking.Yield() trong suốt mã của tôi, kiểm tra cách thức dài nhiệm vụ đã được chạy cho, và nếu nó hơn 2 ms nó tạm dừng nhiệm vụ và tiếp tục khung tiếp theo. Điều này là ok, ngoại trừ việc tôi phải phân tán Multitasking.Yield() ở khắp mọi nơi trong suốt mã của tôi, và đó là một mớ hỗn độn thực sự.Lập lịch tác vụ Lua
Lý tưởng nhất, mã của tôi sẽ tự động mang lại khi nó chạy quá lâu. Vì vậy, có thể lấy một hàm Lua như một đối số, và sau đó thực hiện nó theo dòng (có thể giải thích Lua bên trong Lua, mà tôi biết là có thể, nhưng tôi nghi ngờ nó có thể nếu tất cả các bạn có là một con trỏ hàm)? Bằng cách này, tôi có thể tự động kiểm tra thời gian chạy và năng suất nếu cần thiết giữa mỗi dòng.
EDIT :: Để rõ ràng, tôi đang sửa đổi một trò chơi, điều đó có nghĩa là tôi chỉ có quyền truy cập vào Lua. Không cho phép thủ thuật C++.
Có vẻ như nó yêu cầu quyền truy cập vào nguồn C++? – Martin
là C, không phải C++ – Javier
Thư viện 'debug' được xuất từ Lua. Bạn có thể gọi 'debug.sethook()' trực tiếp từ Lua. –