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

时间:2017-06-13 15:14:28

标签: lua coroutine

我正在尝试创建一个调度多个协同程序的调度程序。调度员需要暂停协程,我无法弄清楚如何做到这一点。

更新 我打算从外面暂停协程,而不是杀人。

3 个答案:

答案 0 :(得分:1)

你可以通过设置一个从该钩子调用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

答案 1 :(得分:0)

在用document.getElementById('map_canvas').firstChild.appendChild(tt); 设置的钩子中返回true时将产生的库

该库足以创建多任务lua系统,只需在代码的第一个位置运行debug.sethook(co, function() return true end, "y"),即可在git上获得更多信息

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

答案 2 :(得分:-1)

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