如何返回之前如何运行多个函数?

时间:2015-09-20 10:58:08

标签: lua coroutine

我有两个无限循环(虽然是真的),我需要程序在其中一个函数返回一些东西后继续运行。但是当第一个函数返回时,第二个函数仍在运行。 我怎么用lua中的协程来做到这一点?

2 个答案:

答案 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()。当其中一个成功结束时,你只需丢弃另一个而不恢复。

相关问题