结束正在运行的Lua脚本。

我有一个基于 MFC 对话框的应用程序,并集成了 Lua。对话框有一个文本编辑器组件,使用户可以输入脚本。对话框还有一个按钮“运行”,按下该按钮会执行以下代码:luaL_loadstring(luaVM,theScript);lua_pcall(luaVM,0,0,0);其中 luaVM 是我的主要 lua_State *。对话框还有另一个按钮“停止”,当按下时,我希望能够停止由“运行”启动的当前正在运行的脚本,但我无法想出一个方法。非常感谢您的帮助!

点赞
用户734069
用户734069

Lua 并不打算以这样的方式使用。Lua 是固有的单线程的(硬件 CPU 线程,而不是 Lua 线程)。一旦脚本开始,除非你在 设计 脚本能够终止,否则没有办法简单地终止它。

你需要做的是把用户的脚本作为 coroutine 启动。这个 coroutine 需要经常手动地 yield,以便你可以检查是否需要停止脚本。由于这是一个手动的过程,你需要让用户正确地插入他们的代码,或者你需要修改他们的脚本并适当添加 yield 调用。

如果你需要停止 coroutine,你可能可以使用一些调试钩子来每隔几秒钟检查并 yield coroutine。然而,我不知道从调试钩子中 yield 是否合法,也不知道是否会真正成功。

2012-07-11 15:50:06
用户282536
用户282536

你可以设置一个调试钩子,稍微睡一会儿。

请参阅 http://www.lua.org/manual/5.1/manual.html#lua_sethook

2012-07-12 09:53:47