Lua相关问题整理(2) – 如何在C中为Lua提供同步调用接口

这个问题的具体描述是——C注册给Lua一个函数,但Lua调用该C函数并不能立即获得结果(比如需要访问远程服务器获取值),如何能让Lua停止并等待,直到获取到结果后,才继续执行接下来的脚本。 举个例子,比如说有一个C函数login,我们试图通过调用该函数以执行用户的登录操作并获取验证结果。首先看下面这段C代码: // C code int login( lua_State *L ) { string user = luaL_checkstring( L, 1 ); string password = luaL_checkstring( L, 2 ); // 该函数将user和password发送到服务器后立即返回, // 绝不要在此处阻塞,这将严重影响效率 sendAuthenticationInfo( user, password ); return 0; } // 注册给Lua lua_register( L, "login", login ); 可以看到,因为该函数需要访问远程的登录服务器,在系统中一般都采取异步操作(让系统阻塞等待结果是不可接受的)。但是这样Lua开发人员调用login函数时,也只能异步等待结果,下面是Lua中处理登录操作的代码。 — Lua code — 当用户点击“登陆”按钮后,执行该函数 function onClickLoginBtn() local user = … [...]