我有一个基于MFC对话框的应用程序并集成了Lua。该对话框具有文本编辑器组件,以便用户可以输入脚本。该对话框还有一个按钮'Run',当按下它时:luaL_loadstring(luaVM,theScript); lua_pcall(luaVM,0,0,0);其中luaVM是我的主要lua_State *。该对话框还有另一个按钮'停止',我想按下时能够停止由'运行'启动的当前运行的脚本,但我无法想出办法。非常感谢帮助!
答案 0 :(得分:1)
Lua不打算以这种方式使用。 Lua本质上是单线程的(硬件CPU线程,而不是Lua线程)。一旦脚本启动,除非你设计该脚本能够终止,否则无法简单地终止它。
您需要做的是将用户的脚本作为协程启动。并且该协程必须经常(并且手动)产生,以便您可以检查是否应该停止脚本。由于这是一个手动过程,您可能需要用户正确检测其代码,或者您需要修改其脚本并适当添加yield
次调用。
如果需要停止,可能每隔几秒钟就可以使用一些调试钩子进行检查并产生协同程序。但是,我不知道这是否真的有效,如果从调试钩子中获取是合法的。
答案 1 :(得分:0)
您可以设置一个稍微休眠的调试挂钩。