我正在尝试创建一个调度多个协程的调度程序。调度程序需要暂停协程,我不知道该怎么做。
更新与其杀人,我的意思是从外面暂停协程。
您可以通过在协程上设置一个调试钩子来终止协程,该挂接器从该钩子调用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(