【问题标题】:end a running lua script结束正在运行的 lua 脚本
【发布时间】:2012-07-11 04:27:22
【问题描述】:

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

【问题讨论】:

  • 我不了解 MFC,但如果 MFC 允许您手动处理一个 GUI 事件,那么您可以设置一个计数挂钩以每隔一段时间执行一次。
  • Forcing a Lua script to exit 的可能重复项

标签: mfc lua


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以设置一个休眠一段时间的调试钩子。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-01
      • 2021-08-19
      • 2016-06-19
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多