所以我有一个非常简单的Lua脚本:
return coroutine.create(function () coroutine.yield(1) end)
然后在C中运行它并获取返回值
lua_State* l = luaL_newstate();
if(luaL_dostring(l, script) == LUA_OK) {
lua_State* co = lua_tothread(l, lua_gettop(l));
lua_pop(l, 1);
}
稍后,C代码会将co
指针传递回Lua(使用lua_pushthread
)并运行coroutine.resume(co)
。
我想知道Lua在此期间是否将GC作为协程对象,使C中的co
指针无效?如果是,我该怎么做才能防止这种情况?
答案 0 :(得分:1)
稍加注意,你可以将协程留在堆栈中。只需删除对lua_pop
的调用。