要在让出后返回到 C 代码,您需要使用lua_yieldk
并让它在一个单独的 C 函数中获取,如下所示:
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <stdlib.h>
static int lua_test_yield_6(lua_State *L, int status, lua_KContext ctx) {
return 0;
}
static int lua_test_yield_5(lua_State *L, int status, lua_KContext ctx) {
printf("5\n");
return lua_yieldk(L, 0, 0, lua_test_yield_6);
}
static int lua_test_yield_4(lua_State *L, int status, lua_KContext ctx) {
printf("4\n");
return lua_yieldk(L, 0, 0, lua_test_yield_5);
}
static int lua_test_yield_3(lua_State *L, int status, lua_KContext ctx) {
printf("3\n");
return lua_yieldk(L, 0, 0, lua_test_yield_4);
}
static int lua_test_yield_2(lua_State *L, int status, lua_KContext ctx) {
printf("2\n");
return lua_yieldk(L, 0, 0, lua_test_yield_3);
}
static int lua_test_yield_1(lua_State *L) {
printf("1\n");
return lua_yieldk(L, 0, 0, lua_test_yield_2);
}
static const struct luaL_Reg mylib[] = {
{"test_yield", lua_test_yield_1},
{NULL, NULL}
};
// Used when the .so library is loaded from lua
int luaopen_mytest(lua_State *L) {
luaL_newlib(L, mylib);
return 1;
}