1

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

4

2 回答 2

1

Lua 不打算以这种方式使用。Lua 本质上是单线程的(硬件 CPU 线程,而不是 Lua 线程)。一旦脚本启动,就无法简单地终止它,除非您将该脚本设计为能够终止。

您要做的就是将用户的脚本作为协程启动。并且该协程必须经常(并且手动)产生,以便您可以检查是否应该停止脚本。由于这是一个手动过程,您要么需要用户正确检测他们的代码,要么需要修改他们的脚本并yield适当地添加调用。

您也许可以使用一些调试钩子每隔几秒钟检查一次,如果需要停止协程,则生成协程。但是,我不知道这是否真的有效,从调试钩子中产生是否合法。

于 2012-07-11T15:50:06.753 回答
0

You could set a debug hook that sleeps for a bit.

See http://www.lua.org/manual/5.1/manual.html#lua_sethook

于 2012-07-12T09:53:47.683 回答