如何停止lua功能块/调用mid执行

时间:2014-06-21 13:59:26

标签: lua

有没有办法从执行中期停止lua pcall到lua功能块?我使用多个线程,最好取消飞行中的功能。

1 个答案:

答案 0 :(得分:2)

最简单的方法是调用error('my message'),因为这将中止执行,并将nil, 'my message'作为pcall()的结果返回。如果你想从“外部”中止一个正在运行的协同程序(或“主”块),我知道没有修改Lua VM的唯一方法就是将一个调试挂钩附加到coroutine或主块并调用{{ 1}}来自那个调试钩子:

error()

你应该看到这样的事情:

print(1)
local count = 0
debug.sethook(function(event, line)
  if count > 1 then error('done', 2) end
  count = count + 1
end, "l")
print(2)
print(3)
print("not getting here")

如果是1 2 3 script.lua:4: done ,您会看到pcall调用的参数将作为error()的错误消息传递。

检查的条件可以非常详细;例如,您可以检查从特定函数调用的钩子,并在中止之前执行一定数量的命令。