如何从函数外部停止 Lua 协程



我正在尝试创建一个调度多个协程的调度程序。调度程序需要暂停协程,我不知道该怎么做。

更新与其杀人,我的意思是从外面暂停协程。

您可以通过在协程上设置一个调试钩子来终止协程,该挂接器从该钩子调用error()。下次调用钩子时,它将触发error()调用,这将中止协程:

local co = coroutine.create(function()
  while true do print(coroutine.yield()) end
end)
coroutine.resume(co, 1)
coroutine.resume(co, 2)
debug.sethook(co, function()error("almost dead")end, "l")
print(coroutine.resume(co, 3))
print(coroutine.status(co))

这将打印:

2
3
false   coro-kill.lua:6: almost dead
dead
库,当您

在使用debug.sethook(co, function() return true end, "y")设置的钩子中返回 true 时,它将生成

该库足以创建多任务Lua系统,只需在代码的第一require("yieldhook")运行更多信息即可在git上提供更多信息

https://github.com/evg-zhabotinsky/yieldhook

使用 coroutine.yield(coroutine-you-want-to-pause(

最新更新