我有两个无限循环(虽然是真的),我需要程序在其中一个函数返回一些东西后继续运行。但是当第一个函数返回时,第二个函数仍在运行。 我怎么用lua中的协程来做到这一点?
答案 0 :(得分:0)
正如奥列格所说,他们实际上并不是立即行动的。他们只是轮流跑。
我相信你正在寻找这样的东西(?):
active = true
coroutine.resume(coroutine.create(function()
while active do
print("Hello")
if (condition) then
active = false --Since the loops only run if active is true, this effectively breaks both loops
break
end
coroutine.yield()
end
end))
active = true
coroutine.resume(coroutine.create(function()
while active do
print("Hi!")
if (condition) then
active = false --Since the loops only run if active is true, this effectively breaks both loops
break
end
coroutine.yield()
end
end))
这里发生了什么:我们将控制从一个线程切换到另一个线程,每次允许1个循环,而不是true,我们在active时运行是真的。因此,通过在循环内将active设置为false,我们也会打破另一个循环。
答案 1 :(得分:-1)
首先,它们不是“同时运行” - Lua(以及几乎大多数其他“多任务”系统)总是只运行一段代码。所以你的无限“管理器”循环将调用第一个协程,等到它产生或结束,然后调用第二个,等待它然后恢复第一个并继续这个过程直到结束。
在你的协同程序中规划逻辑,以便根据你的任务定期yield
定期row_number()
。当其中一个成功结束时,你只需丢弃另一个而不恢复。