lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Thanks a lot for all these answers !
I've just read the documentation of lua-w4, and I found no explaination
about the couroutines functions, wich seems to be:
--
LUA_API void lua_cobegin (lua_State *L, int nargs);
LUA_API int lua_yield (lua_State *L, int nresults);
LUA_API int lua_resume (lua_State *L, lua_State *co);
--
do I just need to call 'lua_yield' during the execution of the script of one
of my robot [I take the example
of a codeware] (for instance during a line hook), then execute the of the
other codes, and when the last code
has been executed, call lua_resume ?
I thought the limitations of the line hook will not permit that kind of
manipulations ...


- gabriel -


----- Original Message -----
From: "Roberto Ierusalimschy" <roberto@inf.puc-rio.br>
To: "Multiple recipients of list" <lua-l@tecgraf.puc-rio.br>
Sent: Saturday, March 16, 2002 1:14 PM
Subject: Re: running LUA code step by step


> > 1) Fire up new fibers (and call lua_newthread) for new objects which
> > need their own script execution/stack/lua_state
> > 2) Keep a list of objects that are ready to execute. Loop over all
> > objects and switch to their fiber.
> > 3) In each object, figure out when they want to yield, either by a
> > line/call hook, or by a call into a registered C function that indicates
> > they need to wait (like a call that blocks on something out of its
> > control).
> > 4) When an object is ready to yield, switch back to the primary fiber.
> > 5) Depending on your needs, have some plan to add objects back to the
> > ready list. If you want all objects to execute code on every cycle, then
> > maybe you don't need a ready list, but I use it to mark scripts that are
> > ready to continue after having some condition met that they are blocked
> > on.
>
> You should be able to do exactly the same thing with coroutines in
> Luaw4. (The only drawback is that currently you cannot yield inside a
> linehook; we will correct that. But you can yield inside a registered C
> function that indicates they need to wait.)
>
> -- Roberto