【问题标题】:How do I get Lua Lanes to work with my game server? [closed]如何让 Lua Lanes 与我的游戏服务器一起工作? [关闭]
【发布时间】:2012-04-13 22:22:08
【问题描述】:

我整天都在为此绞尽脑汁,我就是想不通。我的服务器使用单一状态将我的所有脚本作为全局变量加载(用于随时调用,而无需每次我想运行脚本时luaL_dofile)。当我尝试使用车道时,问题就出现了。 require "lanes" 可以正常工作(我认为?它会适当地返回一个表给 package.loaded ......),因为我在 Linux(Ubuntu 11.10 x86)上的相应目录中有 lanes.lua。但是,当我去做lanes.gen("", functionName) 时,它告诉我...attempt to index global 'lanes': a nil value。此时我决定尝试package.loaded["lanes"].gen("", functionName),它告诉我...attempt to index field 'gen': a nil value 如果您需要更多信息,请告诉我。预先感谢您至少尝试提供帮助。

【问题讨论】:

    标签: c multithreading api lua lua-lanes


    【解决方案1】:

    如果您使用的是latest LuaLanes(这是您通过luarocks install lanes 获得的),则支持的加载模块的方式是:

    local lanes = require "lanes".configure()
    

    configure() 将创建所有必要的函数,在调用 configure() 之前模块表是空的,这似乎是你的问题。

    【讨论】:

    • 好的,这确实有效。不过,我确实有后续行动……我对这些车道的东西并不十分精通,只是试图利用它的“不锁定主线程”导致我的服务器挂起。如何获得通过lanes.gen() 创建的线程与C 通信?我需要制作一个琳达对象或其他东西吗?无论如何,非常感谢让我走到这一步。希望您也可以处理此后续问题。
    • 是的,为了在线程之间进行通信,您需要一个 linda 对象。在线程函数前创建local linda = lanes.linda()作为上值,然后使用linda:send()linda:receive()进行通信。
    • 您在询问如何使创建的通道与 C 通信(而不是与另一个通道,正如 @MichalKottman 所采取的那样)。您将需要制作一个 C 端 Lua 模块,就像没有任何多线程一样。请提供更多信息(是您自己的 C 语言,还是您只需要加载现有模块 - 使用 require)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多