- 论坛徽章:
- 0
|
本帖最后由 converse 于 2013-01-25 15:14 编辑
模拟一个场景,在C中创建出coroutine来执行Lua脚本,并且提供C API给Lua使用,当某些操作可能会阻塞时(如网络I/O),C函数中执行yield将协程切换出去,然后未来的某个时刻,如果条件满足则resume继续执行后面的脚本.我写了个demo程序是这样的:
co.c:- #include <stdio.h>
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- static int panic(lua_State *state) {
- printf("PANIC: unprotected error in call to Lua API (%s)\n", lua_tostring(state, -1));
- return 0;
- }
- static int test(lua_State *state) {
- printf("in test\n");
- lua_yield(state, 0);
- printf("after in test\n");
- return 0;
- }
- int main(int argc, char *argv[]) {
- char *name = NULL;
- name = "co.lua";
- lua_State* L1 = NULL;
- L1 = lua_open();
- lua_atpanic(L1, panic);
- luaL_openlibs( L1 );
- lua_register(L1, "test", test);
- lua_State* L = lua_newthread(L1);
- luaL_dofile(L, name);
- sleep(1);
- lua_resume(L, 0);
- printf("after resume test\n");
- return 0;
- }
复制代码 co.lua- print("before")
- test("123")
- print("after resume")
复制代码 问题在于,resume之后,在co.lua中的"after resume"没有打印出来 |
|