lua - 从 C 访问 Lua 协程
问题描述
我已经实现了一个协同程序系统。当我按 ENTER 清除第一个文本框时,它会调用 contscript() 进而调用 lua_resume() 但它不会继续协同程序。
那么我应该传递什么给 lua_resume() 以使协程继续?
static lua_State *lua;
static int luapanic(lua_State *L)
{
allegro_exit();
const char *err = lua_tostring(L, -1);
DEBUGF("lua panic: %s\n", err);
printf("lua panic: %s\n", err);
return 0;
}
static int textbox(lua_State *L)
{
const char *str = luaL_checkstring(L, 1);
message(str);
return 1;
}
void contscript(void)
{
lua_resume(lua,NULL,0);
}
static int transfer_player(lua_State *L)
{
int x, y;
SpriteObj *p;
x = luaL_checkint(L, 1);
y = luaL_checkint(L, 2);
p = findobject(0);
setposition(p,x,y);
scrollToAndCentre(x,y);
return 1;
}
bool initscript(void)
{
lua = luaL_newstate();
lua_atpanic(lua, luapanic);
luaL_openlibs(lua);
lua_register(lua, "textbox", textbox);
lua_register(lua, "transfer_player", transfer_player);
return true;
}
这是有问题的脚本:
local co = coroutine.wrap(
function()
textbox("Dear me! I never knew birds could sing so\nbeautifully!")
coroutine.yield()
textbox("Text message #2")
end
)
co()
解决方案
推荐阅读
- data-analysis - ROOT TF1函数声明参数问题
- c# - 根据之前玩家的选择更改对象的颜色?
- databricks - 使用 Databricks Job api 调用 databricks 笔记本运行-提交端点
- javascript - 将数据移动到列中的第一个可用单元格(不是行)
- ruby-on-rails - 合并哈希数组并重新排序
- git - Git 错误,命令 git fetch 致命:不是 git 存储库(或任何父目录):Visual Studio 代码中的 .git
- apache - 重定向具有先前重定向匹配设置的 url
- sql-server - 使用 Azure 特定功能时在本地运行 SQL Server 数据库?
- javascript - Javascript等待/异步执行顺序
- salt-stack - 如何断言 mine.get 返回非空结果?