RE: About lua_newthread
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: RE: About lua_newthread
 
- From: "Tom Miles" <Tom@...>
 
- Date: Wed, 7 Jun 2006 16:43:21 +0100
 
Hi,
 
Sorry 
about the the thread necromancy, but I have just encountered this situation in 
the project I am currently working on. I am running several threads from 
my main thread, all of which are just loaded with functions to call in an event 
based system. At various intervals I want to "unload" these functions and 
load a new set, so I want to shut down the thread. I therefore need to 
remove references to my thread from the stack as per the suggestion, however, 
when I iterate through the stack all that is on there is a userdata of 
indeterminate origin, not a thread. (Having said that, I've just 
discovered that if I do lua_touserdata() and compare it to the address of the 
state returned with lua_newthread(), then they are the same, so I have found my 
thread - but there seems to be a little bug there as it isn't of type 
thread?).
 
On a 
similar note, is there a way of removing a non integer index from a 
table? I use the thread as a key in a table to match it up to a game 
object, and when that object is destroyed I want to remove the entry in the 
table as well.
 
Thanks 
for any help.
 
Tom
-----Original Message-----
From: 
lua-bounces@bazar2.conectiva.com.br 
[mailto:lua-bounces@bazar2.conectiva.com.br]On Behalf Of Raymond 
Jacobs
Sent: 18 May 2006 16:20
To: Lua 
list
Subject: Re: About lua_newthread
 When you are done with a thread (when lua_resume returns and it's not a 
 yield), you should remove the thread directly from the stack, this will remove 
 the reference to it and it can then be garbage collected (its a pain I know 
 =/). 
 
 another method which I've not yet done but should work, is to create a 
 new thread, create a lua reference to it (using lua_ref) then pop it off the 
 stack immediately (so it doesn't get buried), and later when you are done with 
 it, destroy the reference (lua_unref) and that should allow it to be GC'd 
 
 
 hope that helps,
 
 Raymond Jacobs
 Owner,
 Ethereal Darkness Interactive
 
 On 5/18/06, mos 
 <mmosquito@163.com> wrote: 
 
Hi
in 
 lua5.1 
 manual:
lua_newthread
     
 lua_State *lua_newthread (lua_State *L);
There is no explicit function to 
 close or to destroy a thread. Threads are
subject to garbage collection, 
 like any Lua object
    I don't 
 understand this , for example like Npc in a 
 game
    function AI() 
 
        
 while(true) 
 do
            
 walkto(A)
            
 walkto(B)
            
 ...
            
 walkto(Z)
        
 end
    
 end
    I bind each npc with a 
 lua_State by lua_newthread 
    but 
 the npc will die and i should close the lua_State , but I 
 can
not.
    what can I do ? or some 
 better suggestion ?
Best 
 Regards
mos