如何运行多个函数直到其中一个返回?

我有两个无限循环(while true do),我需要在其中一个函数返回后程序继续运行。但是当第一个函数返回时,第二个函数仍在运行。 我如何在Lua中使用协程实现这个功能?

点赞
用户936986
用户936986

首先,它们并不是“同时运行”的- Lua(以及几乎大多数其他“多任务”系统)始终只运行一段代码。因此,您的无限“管理器”循环将调用第一个协程,等待其产生或结束,然后调用第二个协程,等待它并然后恢复第一个协程并继续此过程,直到结束。

在两个协程中都计划逻辑,以便它们会周期性地 yield 一段时间,根据您的任务合理地间隔一段时间。当其中一个成功结束时,您只需放弃另一个而不需要恢复。

2015-09-22 22:31:41
用户3979429
用户3979429

正如 Oleg 所说,它们实际上并不会同时运行。它们只是轮流运行。

我认为你正在寻找像这样的东西:(?)

active = true
coroutine.resume(coroutine.create(function()
        while active do
            print("Hello")
            if (condition) then
                active = false --因为循环仅在active为真时才运行,所以这实际上会中断两个循环
                break
            end
        coroutine.yield()
        end
end))

    active = true
coroutine.resume(coroutine.create(function()
        while active do
            print("Hi!")
            if (condition) then
                active = false --因为循环仅在active为真时才运行,所以这实际上会中断两个循环
                break
            end
        coroutine.yield()
        end
end))

这里发生了什么:我们从一个线程切换到另一个线程,每次允许1个循环,而不是while true do,我们正在运行while active is true。因此,在循环中将活动设置为false,我们也中断了另一个循环。

2015-10-25 19:10:01