lua-users home
lua-l archive

Re: Use of Lua corotines in games

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


From the manual:
"coroutine.yield (···)
Suspends the execution of the calling coroutine. The coroutine cannot be running a C function, a metamethod, or an iterator. Any arguments to yield are passed as extra results to resume." The bit I don't understand is how a coroutine in Lua can call yield() while it is running a C function? A code example would help here. The manual entry for lua_resume() doesn't mention anything about yielding across C calls.
"lua_yield
int lua_yield (lua_State *L, int nresults);
Yields a coroutine.
This function should only be called as the return expression of a C function, as follows:
 return lua_yield (L, nresults);
When a C function calls lua_yield in that way, the running coroutine suspends its execution, and the call to lua_resume that started this coroutine returns. The parameter nresults is the number of values from the stack that are passed as results to lua_resume." What's not clear here is whether the 'running coroutine' is one created in Lua, that called a C function ending in lua_yield, or whether the running coroutine was a thread created in C via lua_newthread, or whether either case is valid. Perhaps 'not yielding across C calls' simply means that lua_yield should not be called inside a C function, but only at the end as a return value?
On Mar 19, 2007, at 5:36 PM, David Burgess wrote:
lua_resume()->lua code->resume()->C function->pcall()->yield()
I think I have this right. So when the coroutine starts running it might
call a C function which might pcall some Lua code that yields. THis
means that the yield() needs to cross a C/Lua boundary.
The same problem occurs when starting with lua_resume() and then
executing Lua pcall() which in turn may call lua_yield().
db
On 3/20/07, Graham Wakefield <lists@grahamwakefield.net> wrote:
I keep hearing this phrase, but what exactly does it mean? Thanks!
On Mar 19, 2007, at 6:46 AM, Eike Decker wrote:
> Only problem is, that lua coroutines can't yield across C calls

AltStyle によって変換されたページ (->オリジナル) /