0

我正在使用一个包含涉及TempoClock.default.sched[我正在准备 MWE] 的函数的类。如果我创建该类的新实例并应用该函数,则会收到以下错误消息:

调度程序队列已满。

这条消息一直在重复。这是什么意思?

4

1 回答 1

2

每个时钟都有一个队列来存储预定的事件。队列的大小非常大 - 但仍然有限(我认为 ~4096 项?)。当此队列已满时,会发生“调度程序提示已满”错误 - 当您在给定时钟上合理地安排了超过 4096 个事件时,可能会发生这种情况。但是,一个常见的错误案例是意外地将事件排在很远的将来,这样它们就永远挂在队列中,最终填满它。如果您调用 .sched(...),这很容易做到这一点,它采用相对时间值,但尝试传递一个绝对时间(这会将事件安排在很远的将来)。

如果您需要在给定时间实际安排超过 4096 个事件 - 我相信 Scheduler 类有一个可以任意大的队列。AppClock 使用这个调度器,所以它不应该有大量事件的问题。但是 - AppClock 的计时不如 SystemClock 准确,并且不适合细粒度的音乐事件。如果您需要高度准确的计时,您可以使用多个 TempoClock,例如为每种乐器或每种不同类型的事件使用不同的 TempoClock 等。

于 2016-10-25T21:04:06.883 回答