【问题标题】:Lua sessions with dedicated "consoles" in multithreading environment多线程环境中具有专用“控制台”的 Lua 会话
【发布时间】:2015-05-26 17:10:14
【问题描述】:

在用 C++ 编写的嵌入式多线程程序中有许多 Lua 会话(每个会话由其自己的 lua_State 表示)。每个 Lua 会话都有一个由 C++ 对象表示的专用“控制台”。此“控制台”旨在提供特定于会话的 stdin/stdout/stderr 流。

向 Lua 会话提供这样一个“控制台”的正确方法是什么?
将标准流重定向到/来自这样的控制台的正确方法是什么?

【问题讨论】:

    标签: multithreading lua


    【解决方案1】:

    您可以将userdata 插入io.stdin/stdout/stderr 使用

    lua_getglobal(L, "io");
    lua_pushlightuserdata(L, …); // or whatever value you want here
    lua_setfield(L, 0, "stdin");
    // rinse, repeat for stdout and stderr
    

    【讨论】:

    • 我明白了。如果我的控制台对象与FILE 结构兼容,则建议的解决方案有效。如果不是,那么可能需要在 Lua 深处进行进一步的更改,不是吗?此外,还需要使用print 函数做一些事情,目前使用lua_writestringlua_writeline 函数实现,而lua_State 不可用。
    • 您至少应该实现必要的read()write() 操作(您可以使用元表来实现)。请注意,这甚至在 lua 本身中也是可能的——没有什么能阻止你覆盖 io.stdin。当您使用它时,您可以覆盖 _G["print"](是的,忘记了那个)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2011-01-31
    • 2013-06-29
    • 1970-01-01
    • 2023-03-21
    • 2021-06-13
    相关资源
    最近更新 更多