Ev sahibi C uygulama, bir Lua yorumlayıcısının gömülü olduğu, Lua komut dosyasının çalıştırılmasında belirli nesne/tablonun çöp toplandığı bildirilmesi gerekir, bu yüzden bir şeyler yapar , bu olayı kayıt dosyasına kaydetmek gibi. Bunu nasıl yapabilirim? Userdata'ya bir metatable ekleyerek ve metatable'a "__gc" işlevi ekleyerekNesne/tablo çöp toplanırken ana bilgisayar uygulamasına nasıl bildirilir
7
A
cevap
12
. oluşturmak ve bir userdata nesneye bir MetaTable eklemek için
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
C kodu: Lua tabloları çöp toplama algılamak için
In Lua 5.1, only userdata has support for the "__gc" methamethod.
bir yolu olduğunu tabloya kanarya userdata nesnesi eklemektir
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. */
}
İlgili konular
- 1. C - ana bilgisayar
- 2. GitHub'da ana bilgisayar yürütülebilirleri?
- 3. Opencl'de ana bilgisayar nedir?
- 4. İzin reddedildi veya Ana bilgisayar sorunları
- 5. Ana bilgisayar bileşenine direktiften nasıl erişilir?
- 6. Konteyner yazılabilir ana bilgisayar dizini nasıl oluşturulur?
- 7. Bilinmeyen Ana Bilgisayar İstisnası - Android
- 8. PHP'yi kullanarak IP'ye Ana Bilgisayar Adını Çözümleme
- 9. SDK manager Bilinmeyen ana bilgisayar dl-ssl.google.com
- 10. mongodb replicaset ana bilgisayar adı değişikliği hatası
- 11. Sanal ana makineye (Ana Bilgisayar HTTP üstbilgisine) göre rota yönlendirir
- 12. IP adresini ana bilgisayar adına dönüştürme
- 13. İşbirliği document.referrer ana bilgisayar için bir bölünmüş
- 14. java.io.IOException: Eksik HDFS URI, ana bilgisayar yok
- 15. PHP/Vagrant - Host Erişimi Ana Bilgisayar DB
- 16. Bir kullanıcıyı ana bilgisayar ağından ayırma
- 17. Mac OS X ana bilgisayar dosyasını
- 18. ansible yalnızca ana bilgisayar yeniden başlatıldıysa
- 19. MVC2 yol haritalamasına ana bilgisayar adı nasıl eklenebilir?
- 20. Ana bilgisayar sunucusunun adını almak için Django nasıl kullanılır?
- 21. Harici ana bilgisayar kullanmadan aygıtın harici IP adresini nasıl programlanır?
- 22. JavaScript kullanarak yönlendirenin alan adını/ana bilgisayar adını nasıl alabilirim?
- 23. Windows'a özgü kullanıcı ana bilgisayar dosyası nasıl yapılandırılır?
- 24. ActiveMQ ana bilgisayar adını el ile nasıl yapılandırabilirim?
- 25. Owin kendini ana bilgisayar desteği Json çıkışı nasıl yapılır?
- 26. Netty çöp üretimini nasıl azaltabilirim?
- 27. printf() nasıl bildirilir?
- 28. Swagger Aynı Json belirtiminde birden çok ana bilgisayar
- 29. Apache - sanal ana bilgisayar olarak url yolunu işleme
- 30. Öğe ana bilgisayar yükleme zamanı sayısı ile winforms
Çözüm şu anda im kullanıyor. Daha iyi bir tane olduğunu düşündüm. BTW Bu yeni proxy nedir (doğru)? – Vertilka
newproxy (true) - bir userdata nesnesi (boyut = 0 ile) ve bir metatable oluşturur. Lua'nın belgelenmemiş bir özelliğidir. Burada daha fazla okuyabilirsiniz: http://lua-users.org/wiki/HiddenFeatures – Neopallium