如何在 Lua 函数执行时停止/中断函数调用?

有没有一种方法可以在执行 Lua 函数时停止 Lua pcall 阻塞?我正在使用多个线程,能够取消正在进行的函数会很好。

点赞
用户1442917
用户1442917

最简单的方法是调用error('my message'),因为这将中止执行并返回nil,'my message'作为pcall()的结果。如果要从“外部”中止正在运行的协同程序(或“主”块),我所知道的唯一方法而不修改Lua VM是将调试钩子附加到协同程序或主块上,并从该调试钩子调用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()调用的参数作为pcall的错误消息传递。

要检查的条件可能会非常复杂;例如,您可以检查具有某些执行命令数的特定函数调用的钩子以进行中止。

2014-06-21 17:15:35