- 论坛徽章:
- 4
|
本帖最后由 linux_c_py_php 于 2013-01-16 00:58 编辑
与之对应的C实现只能是这样, 根本不会从pcallk返回, 而且是直接从c_cont中return到c.callback被调用位置, 为何有差别? 无法实现成一致的么? 什么道理?- [root@vps616 study]# ./main.lua
- coroutine yielding
- 5
- coroutine resumed
- the end
- [root@vps616 study]# cat main.lua
- #!/usr/bin/env lua
- c = require('c')
-
- co = coroutine.create(function()
- print('coroutine yielding')
- n = c.callback(function()
- coroutine.yield()
- end)
- print(n)
- print('coroutine resumed')
- end)
-
- coroutine.resume(co)
- coroutine.resume(co)
-
- print('the end')
- [root@vps616 study]# cat src/mod.c
- #include<stdio.h>
- #include<stdlib.h>
- #include<lua.h>
- #include<lualib.h>
- #include<lauxlib.h>
-
- static int c_cont(lua_State *L) {
- lua_pushinteger(L, 5);
- return 1; //这里返回到了c_callback被调用的位置, 也就是lua里的调用点
- }
-
- static int c_callback(lua_State *L){
- int ret = lua_pcallk(L, 0, 0, 0, 0, c_cont);
- if(ret) {
- fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
- lua_pop(L, 1);
- exit(1);
- }
- return 0;
- }
-
- static const luaL_Reg c[] = {
- {"callback", c_callback},
- {NULL, NULL}
- };
-
- int luaopen_c (lua_State *L) {
- /* 使用新的 luaL_newlib 函数 */
- luaL_newlib(L, c);
- return 1;
- }
复制代码 |
|