मेरा होस्ट सी एप्लिकेशन, जो लुआ दुभाषिया को एम्बेड करता है, को सूचित किया जाना चाहिए कि लुआ लिपि चलाने में कुछ वस्तु/तालिका कचरा एकत्रित है, इसलिए यह कुछ करेगा , फ़ाइल को लॉग इन करने के लिए इस घटना को रिकॉर्ड करें। मैं उसे कैसे कर सकता हूँ?ऑब्जेक्ट/टेबल कचरा एकत्रित होने पर होस्ट एप्लिकेशन को सूचित करने के लिए कैसे करें
7
A
उत्तर
12
userdata करने के लिए एक metatable जोड़ने और metatable के लिए एक "__gc" समारोह जोड़कर
।
function create_canary(tab)
local canary=newproxy(true)
local meta=getmetatable(canary)
meta.__gc = function() print("Canary is died:", tab) end
tab[canary] = canary
end
सी कोड बना सकते हैं और एक userdata ऑब्जेक्ट में एक metatable जोड़ने के लिए: लुआ तालिकाओं का कचरा संग्रहण का पता लगाने के
In Lua 5.1, only userdata has support for the "__gc" methamethod.
एक तरीका यह है कि तालिका में एक कनारी userdata वस्तु को जोड़ने के लिए है
static int userdata_gc_method(lua_State *L) {
UserObj *ud = lua_touserdata(L, 1);
/* TODO: do something */
return 0;
}
static int create_userdata_obj(lua_State *L) {
UserObj *ud = lua_newuserdata(L, sizeof(UserObj));
/* TODO: initialize your userdata object here. */
lua_newtable(L); /* create metatable. */
lua_pushliteral(L, "__gc"); /* push key '__gc' */
lua_pushcfunction(L, userdata_gc_method); /* push gc method. */
lua_rawset(L, -3); /* metatable['__gc'] = userdata_gc_method */
lua_setmetatable(L, -2); /* set the userdata's metatable. */
return 1; /* returning only the userdata object. */
}
संबंधित मुद्दे
- 1. उत्पादक होने पर उपभोक्ता को सूचित करने के सुरुचिपूर्ण तरीके?
- 2. क्या यह कचरा एकत्रित होगा?
- 3. इवेंट ग्राहक को सूचित करने के लिए कैसे करें
- 4. ब्राउज़र में जावास्क्रिप्ट अक्षम होने पर सूचित करने के लिए कैसे करें
- 5. jQuery/AJAX: एक होस्ट ऑफ़लाइन होने पर निर्धारित करने के लिए कैसे करें
- 6. ऐप स्टोर पर नए अपडेट/संस्करण जारी होने पर उपयोगकर्ता को सूचित कैसे करें?
- 7. जावा में एकत्रित कचरा किस वस्तु को देखा गया है?
- 8. जावा थ्रेड कचरा एकत्रित या नहीं
- 9. क्या आरएआईआई सी # में उपयोग करने के लिए सुरक्षित है? और अन्य कचरा भाषा एकत्रित करना?
- 10. जावा डायरेक्टबेट बफर रैपर कचरा एकत्रित हैं?
- 11. सूचित करने के लिए कैसे उपयोग करें और
- 12. जावा - कब सूचित या सूचित करने के लिए सभी?
- 13. वाईएक्स: विंडोज़ लॉन्च होने पर शुरू करने के लिए एप्लिकेशन कैसे पंजीकृत करें?
- 14. कनेक्शन स्थानीय होस्ट होने पर जावास्क्रिप्ट के साथ कैसे जांचें?
- 15. .NET: किसी वस्तु को डिस्पोजेड/कचरा एकत्रित करने के बारे में बताने का कोई तरीका?
- 16. विंडो सेवा के लिए आइकन सूचित करें
- 17. गो में कचरा संग्रह को कम करने के लिए कैसे?
- 18. सिल्वरलाइट कंटेंट कंट्रोल्स कचरा क्यों नहीं एकत्रित किया जाता है?
- 19. किसी एमएफसी एप्लिकेशन में एक WPF फॉर्म होस्ट करने के लिए कैसे करें
- 20. उपयोगकर्ताओं को सूचित करने के लिए कि वेबप्लिकेशंस IE6
- 21. यूएसबी आइटम पीसी से कनेक्ट होने पर लॉन्च करने के लिए एप्लिकेशन पंजीकृत करें
- 22. स्थानीय होस्ट करने के लिए
- 23. सी # एप्लिकेशन शुरू होने पर कई रूपों को प्रदर्शित करें
- 24. होस्ट करने या होस्ट करने के लिए नहीं?
- 25. कचरा एकत्रित सी सी ++ से तेज हो जाएगा?
- 26. वेबपृष्ठ पर एक सी ++ डेस्कटॉप एप्लिकेशन होस्ट करें
- 27. पाइथन एप्लिकेशन को मॉड्यूलर करने के लिए कैसे करें
- 28. एंड्रॉइड: एक नए संस्करण के उपयोगकर्ता को सूचित करें
- 29. स्थापित होने पर एंड्रॉइड एप्लिकेशन को कैसे खोलें और
- 30. पृष्ठभूमि में एप्लिकेशन की मौत होने पर सफाई कैसे करें?
समाधान im वर्तमान में उपयोग कर thats। सोचा कि एक बेहतर है। बीटीडब्ल्यू इस न्यूप्रोक्सी (सच) क्या है? – Vertilka
newproxy (सत्य) - एक उपयोगकर्ता डेटा वस्तु (आकार = 0 के साथ) और एक मेटाटेबल बनाता है। यह लुआ की एक गैर-दस्तावेज विशेषता है। आप इसके बारे में यहां और अधिक पढ़ सकते हैं: http://lua-users.org/wiki/HiddenFeatures – Neopallium