- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的服务器应用程序同时使用 LuaJit 运行 Lua 脚本。每个内部 C++ 脚本类存储自己的 lua_State 表示。
我想要实现的是实现某种共享线程池,以避免从每个正在运行的脚本中产生大量线程(我知道 Lua 正在运行协程,它们不是真正的线程,但一些库确实产生实际线程,就像 cqueue 做 C fork )
我知道有很多库,如 luv(来自 luvit 项目的 libuv 绑定(bind))、turbo、cqueue,此时我只是想知道我是否会使用,例如,脚本 A 中的 libuv 提供的 EventLoop 是吗将与需要相同库的脚本 B 中使用的循环相同吗?
问题在于,Lua 脚本可能有一个长时间运行的任务,而 C++ 代码需要调用事件回调。考虑到 lua_State 不是线程安全的,它将阻塞整个服务器线程。
最佳答案
这完全取决于被调用的库。
您(或多或少)不能多次加载相同的 SO,因为根据定义这是相同的代码。因此,如果被调用的库本身不是线程安全的(它有一些库全局状态或其他),那么如果没有某种形式的显式同步,任何依赖它的代码都不是线程安全的。
您必须调查此代码使用的库,以查看它们是否依赖于全局状态。
关于c++ - 是否需要使用共享库的不同 lua_State?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51943629/
我有 2 个脚本,每个都处于不同的 lua_State。 我正在尝试能够从一种状态获取变量并在另一种状态下使用它。 我下面的代码适用于单个变量和单向数组。我能否获得一些关于使其也适用于多维数组的指导?
在我的引擎中,目前,每个实体都有自己的 lua_State * 链接到它。实体基类有一个函数 linkScript(const char *scriptPath)将调用 luaL_dofile(lua
现在假设您有两个具有不同 lua 实例的程序。一个是主程序,第二个是你为它编写的dll。 在我的问题中,我将从现在开始将主程序命名为 main, dll i child。我们将子进程加载到主进程中,绕
我的服务器应用程序同时使用 LuaJit 运行 Lua 脚本。每个内部 C++ 脚本类存储自己的 lua_State 表示。 我想要实现的是实现某种共享线程池,以避免从每个正在运行的脚本中产生大量线程
对于一个学校项目,我使用 Lua 向游戏引擎添加一些脚本功能。引擎加载速度很慢,所以我希望能够重新加载脚本,而不是每次更改我的 Lua 脚本时都必须重新启动它。我希望能够以安全可靠的方式执行此操作,即
所以我正在尝试为 lua 和 irrlicht 编写一个程序,目前我正在制作一个函数来创建一个可以从命令行实时调用的网格(在本例中是一个简单的三角形)。 例如,当程序运行时,如果我在命令行中写“add
我想在我的程序中使用一个全局 lua_State* 变量,通过 initLua() 函数初始化它,并使用它从 main() 运行一些 Lua 函数。当我尝试时,Lua 代码根本无法运行。将来,我想使用
我需要使用 C++ 中的套接字将 lua_state 发送到服务器。我如何序列化 lua_State 以便它可以通过网络发送? 最佳答案 根据您的需要,您有多种选择。您可以尝试使用 Pluto Lib
我猜不会(或者,如果可能的话,几乎肯定不值得我花时间)。 我的想法是构建一个包含 offset_ptr 的镜像对象,该对象也位于类中,拥有子进程可以使用的 lua_State获取指向状态的相关指针的位
我在一个 Lua 脚本中有一个表,我想与其他 Lua 脚本共享,这些脚本在不同的 lua_State 中加载,因此它们可以调用该表中的方法。有可能吗? 最佳答案 不,除非您手动复制状态之间的数据。 L
上下文:我正在研究一组绑定(bind),我的许多函数都引用了“全局”Lua 状态。 (在我正在开发的代码中,它实际上并不是全局的,而是特定运行时实例的局部变量,因此全局,所有回调函数都可以访问共享状态
如何为 lua_State 设置一次全局 C++ 指针。并从 C 函数中获取它。 Context *context = new Context(); lua_State *lua = luaL_new
我正在为 Lua 编写 C++/OOP 包装器。我的代码是: class LuaState { boost::shared_ptr L; LuaState(): L( luaL_n
我们在多台计算机上工作,执行一个用 c/c++ 编码并使用 lua api 的程序,每台计算机都因不同的错误而崩溃。它通常要么是段错误,其回溯将我们引向 bu liblua 调用,要么是通常在尝试调用
所以有一个 main_window 类来处理所有事情,这里重要的是敌人的 Vector,敌人,当敌人死亡时,它会将一个效果对象推回到 Effect 的 vector 中。这是方便的地方 lua_Sta
我在 visual studio 2010 中使用 Lua ver 5.2.3,当我编译下面的代码时 #include "stdafx.h" #include "lua.h" #include "la
我是一名优秀的程序员,十分优秀!