मैं एक गेम के लिए कुछ स्क्रिप्ट लिख रहा हूं, स्क्रिप्ट लिआ में लिखी गई हैं। गेम की आवश्यकताओं में से एक यह है कि आपके लुआ स्क्रिप्ट में अपडेट विधि (जिसे प्रत्येक फ्रेम कहा जाता है) को चलाने के लिए 2-3 मिलीसेकंड से अधिक समय नहीं लग सकता है, अगर यह गेम बस लटकता है।लुआ कार्य शेड्यूलिंग
मैंने इस समस्या को कोरआउट के साथ हल किया है, मुझे बस मल्टीटास्किंग कॉल करना है। रुनटास्क (कुछ समारोह) और फिर कार्य कोरआउटिन के रूप में चलता है, फिर मुझे अपने कोड में मल्टीटास्किंग.इल्ड() को स्कैटर करना होता है, जो जांचता है कि कैसे लंबे समय तक काम चल रहा है, और यदि यह 2 एमएस से अधिक है तो यह कार्य को रोक देता है और इसे अगले फ्रेम को फिर से शुरू करता है। यह ठीक है, सिवाय इसके कि मुझे अपने कोड में मल्टीटास्किंग.इल्ड() हर जगह स्कैटर करना है, और यह एक वास्तविक गड़बड़ है।
आदर्श रूप से, मेरा कोड स्वचालित रूप से उपज जाएगा जब यह बहुत लंबा चल रहा है। तो, क्या यह एक लूआ फ़ंक्शन को तर्क के रूप में लेना संभव है, और उसके बाद रेखा से इसे निष्पादित करें (शायद लुआ के अंदर लुआ को समझना, जो मुझे पता है, संभव है, लेकिन मुझे संदेह है कि यदि आपके पास एक कार्य सूचक है तो यह संभव है)? इस तरह से मैं स्वचालित रूप से रनटाइम की जांच कर सकता हूं और प्रत्येक पंक्ति के बीच आवश्यक होने पर उपज कर सकता हूं।
संपादित करें: स्पष्ट होने के लिए, मैं एक गेम संशोधित कर रहा हूं, जिसका मतलब है कि मुझे केवल लुआ तक पहुंच है। कोई सी ++ चाल की अनुमति नहीं है।
ऐसा लगता है कि इसे C++ स्रोत तक पहुंच की आवश्यकता है? – Martin
यह सी है, सी ++ – Javier
'डीबग' पुस्तकालय लुआ से निर्यात किया जाता है। आप सीधे lua से 'debug.sethook()' को कॉल कर सकते हैं। –