在C++中延迟执行Lua回调

我想要做的是执行 'createEvent' 方法,其第一个参数是在特定延迟时间(第二个参数)之后应在C ++中执行的回调:

createEvent(function() print"Event has been fired.") end,10

当事件结束时,回调函数从未被执行。

在调用'lua_pcall'之前,我在堆栈上有以下内容:

nil,boolean,userdata

应该如何正确处理此问题?

我迄今为止所尝试过的是:

struct LuaCallbackEvent {
    int32_t delay;
    int32_t ref;

    LuaCallbackEvent():delay(0),ref(0){};
};

int32_t _lua_createEvent(lua_State * L){
    //回调延迟
    auto delay = lua_tonumber(L,2);
    // Lua回调引用
    auto lua_cb = luaL_ref(L,LUA_REGISTRYINDEX);

    LuaCallbackEvent cb;
    cb.delay = delay;
    cb.ref = lua_cb;

    EventManager :: instance()。CreateLuaCallback(cb);
    返回0;
}

//在经过特定时间后调用
void ExecuteLuaCallback(LuaCallbackEvent * ev){
    if(!L){
        LERR <<"No state";
        返回;
    }

    //通过引用检索回调
    lua_rawgeti(L,LUA_REGISTRYINDEX,ev->ref);

    //执行回调
    lua_pcall(L,1,LUA_MULTRET,0);

    //取消引用
    luaL_unref(L,LUA_REGISTRYINDEX,ev->ref);
}
点赞