1

我有一个无限循环,它在 Flutter 应用程序的异步函数中运行(虽然代码是纯 Dart,但没有使用 Flutter API)。

基本上,它处理一些数学内容,但我希望能够使用来自硬件的事件(在这种特定情况下来自麦克风)更新要处理的数据。

为了让快速while(true)有机会从外部获取事件,我添加了一个持续时间为零的延迟。

doStuff() async {
  while (!stopFlag) {
    processMathStuff(dataModifiedByHardwareCallback);

    // Without this, the loop can't be interrupted.
    await Future.delayed(Duration.zero);
  }
}

尽管这似乎在大多数平台上都有效,但Future.delayed像这样调用会使这个循环比我想要的慢得多。问题是是否有更好(更快)的方法来做到这一点。这对我来说甚至看起来有点像黑客。我尝试Future.delayed只在一定数量的迭代中调用一次,但即使每 10 次迭代调用一次,系统也会丢失事件。

顺便说一句,processMathStuff内部不包含循环,所以它实际上是 O(1)。

注意:如果我将代码移动到 Isolate,如果while(true)缺少那种“yield”,我会遇到类似的问题,即 Isolate 不听 sendPort 的东西。

4

0 回答 0