jjzjj

c++ - 如何干净利落地结束 Lua 线程?

我的情况是,我正在使用Lua(C)API来执行保存在字符串中的脚本。我希望用户能够终止脚本的执行(如果脚本包含无限循环,这是必不可少的),我该怎么做?lua_State*Lua=lua_open();char*code;//InitialisationcodeluaL_dostring(L,code); 最佳答案 在线上Hook是不够的。此代码是单行,但会永远循环:whiletruedoend您需要设置一个指令计数Hook。如果我没记错的话,应该是lua_sethook(Lua,&LineHookFunc,LUA_MASKCOUNT

c++ - lua_newstate 与 lua_newthread

我正在尝试将lua实现到我现有的多线程应用程序中。我听说lua不是线程安全的我一直在为不同的线程创建不同的lua_State(s)。通过lua头文件我找到了lua_newthread。您将如何将其实现到一个准备就绪的线程应用程序中。您是创建一个lua_State并创建单独的lua_newthread(s)还是会导致其他问题? 最佳答案 注意,Lua线程不是操作系统线程(尽管名称具有误导性),只是Lua本身(而不是主机应用程序)中的设施以异步方式执行代码。所以答案是:在您的应用程序中为每个线程创建一个lua_State,如果您需要在状

c++ - luabind:无法从非内置类索引的表中检索值

我使用的是来自RyanPavlik主发行版的luabind0.9.1和Lua5.1,WinXPSP3上的cygwin+最新补丁x86,boost1.48,gcc4.3.4。Lua和boost是cygwin预编译版本。我已经成功构建了静态和共享版本的luabind。两个版本都通过了所有测试,除了test_object_identity.cpp测试在两个版本中都失败了。我已将问题追踪到以下问题:如果表中的条目是为非内置类(即非int、字符串等)创建的,则无法检索该值。下面是演示这一点的代码片段:#include"test.hpp"#include#includeusingnamespace

c++ - MSVC 名称修改

我正在尝试使用MSVC2015x86构建Lua和QtLua,但我遇到了导出/导入符号的问题。这是我为构建Lua5.3.2(source)所做的工作:cl/MD/O2/c/DLUA_BUILD_AS_DLL*.crenlua.objlua.orenluac.objluac.olink/DLL/IMPLIB:lua5.3.2.lib/OUT:lua5.3.2.dll*.objlink/OUT:lua.exelua.olua5.3.2.liblib/OUT:lua5.3.2-static.lib*.objlink/OUT:luac.exeluac.olua5.3.2-static.lib到目

c++ - 具有 C++ 性能问题/滞后峰值的 Lua

我正在开发一款游戏,我使用(SFML)C++作为核心,使用Lua作为Actor脚本。但是,我遇到了一些性能问题,我不确定哪里出了问题。我创建了一个测试程序来显示我遇到的问题。基本上,有时当我从C++调用Lua函数时,返回时间比平时长得多。我需要我的游戏以60fps的速度运行,大部分时间都可以,但偶尔一个或多个函数调用会比平时花费更长的时间。我的第一个想法是它是内存管理器,但关闭它似乎并没有消除尖峰。我知道有几款游戏使用Lua,我想这对他们来说不是问题。人们建议使用LuaJIT可以解决这个问题,所以我下载并设置了LuaJIT(使用lua5.1)。我的平均时间有了显着改善,但尖峰仍然一如既

c++ - 如何设计CAD软件包的结构?

我正在用C++开发用于打印电路板和原理图的计算机辅助设计软件包(又名EDACAD)。它使用Lua进行某些特定的操作,但是我想扩展Lua的角色,以便它实现许多用户界面逻辑。我想以某种方式重建内部结构,使人们可以通过编辑Lua轻松更改用户界面的行为,并添加全新的功能。问题是,除了没有向Lua代码公开某种大规模的API之外,我想不出一种实现此目的的好方法。我怀疑一个庞大的API,对我能想到的所有功能进行函数调用,可能是一个糟糕的设计。我该如何设计一个系统,让用户实现我什至没有想到的功能?是否有我可以阅读的优质文档或书籍,或者是人们谈论这种事情的论坛。我已经进行了几个月的搜索和思考,但是我仍然

c++ - Lua:C++ 模块不能互相引用, undefined symbol

我创建了两个模块(共享对象)CPU和SaveState作为模拟器的一部分。两者都独立编译成.so单独的文件,并在运行时由Lua脚本使用require()加载;即:SaveState=require("SaveState")CPU=require("CPU")在CPU中,有一个对SaveState进行操作的方法:intCPU::save_state(SaveState*state){state->begin_section(savestate_namespace,savestate_data_size);state->write16(this->reg.af);state->write1

c++ - LuaPlus:如何让函数返回一个表?

我想知道如何从C++端创建和注册一个函数,该函数在从Lua端调用时返回一个表。我尝试了很多东西,但没有任何效果。:/(抱歉代码太长)这例如是行不通的,因为Register()需要一个“luaCFunction”风格的函数:LuaPlus::LuaObjectTest(LuaPlus::LuaState*state){inttop=state->GetTop();std::stringvar(state->ToString(1));LuaPlus::LuaObjecttableObj(state);tableObj.AssignNewTable(state);if(var=="aaa")

c++ - Lua C API 内存泄漏? (valgrind)

我正在尝试编写一个嵌入了Lua的C程序。而且,我尝试了一个非常简单的程序来启动,它只是创建Lua上下文,然后销毁它:#include#include#include#includeextern"C"{#include#include#include}intmain(intargc,char*argv[]){lua_State*L=lua_open();luaL_openlibs(L);lua_close(L);fprintf(stderr,"%s:%d\n",__FILE__,__LINE__);return(0);}我是这样编译的:(我实际上使用的是Torch7,所以..)g++-c

c++ - 如何以最简单的方式禁用 lua 中的风险函数?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:HowcanIlimitluapossibilities(callingOSfunctions,modules,etc.)HowcanIcreateasecureLuasandbox?luaL_openlibs(m_pState);我使用此函数加载所有库。我想跳过所有危险的库,如IO,但我找不到任何关于如何禁用库的文档。如何禁用某些库?是否有更危险的库可以获得脚本对系统的访问权限?