[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