尝试同时运行两个循环 Minecraft ComputerCrafft

这是我的代码 https://pastebin.com/fnZreFKA 我尝试过所有协程选项,我在两个函数的开头打印语句,它打印了,但循环没有执行任何操作

coroutine.wrap(constantWork)()
coroutine.wrap(lookForKeys)()

循环从第170行开始

点赞
用户8621712
用户8621712

因为它们不是分离的线程,它们是绿色的同步线程,同一时间只有一个线程将运行代码。

为了模拟多任务处理,您忘记使用 yieldcoroutine.yield 暂停线程并在您调用 coroutine 后运行下一个代码。您可以稍后通过再次调用封装的 coroutine 或使用 coroutine.resume(如果您使用 coroutine.create 创建了它)来恢复 coroutine。

阅读此处的文档:https://www.lua.org/pil/9.html

2020-11-28 23:04:30
用户106104
用户106104

coroutine.wrap 基于您传递的函数创建一个新的协程,然后基于该协程创建一个新的函数。第一次调用它时,它调用原始函数直到它被暂停。下一次,它从 yield 返回并一直运行直到下一个 yield。如此反复。

在 ComputerCraft 中,yielding 等同于等待一个事件。

ComputerCraft 自带 parallel 库,用于在多个函数之间以协程形式并行运行。它为您完成所有工作。

您可以使用 parallel.waitForAllparallel.waitForAny,具体取决于何时需要它返回结果。

使用方式:parallel.waitForAll(constantWork, lookForKeys)

2020-12-08 21:34:45