dart - 如何终止长时间运行的隔离#2

标签 dart dart-isolates

我试图了解如何将我的 Java 国际象棋引擎移植到 dart。

所以我明白我应该使用 Isolates 来与 GUI 并行运行我的引擎,但是如何强制引擎终止搜索。

在java中,我只是设置了一些在引擎线程和gui线程之间共享的 bool 值。

我得到的答案:

您应该向隔离发送消息,告诉它停止。您可以简单地执行以下操作:

port.send('停止');

我的请求

感谢您的澄清。我不明白的是,如果国际象棋引擎隔离因 port.send('THINK') 命令而忙碌,它如何响应 port.send('STOP') 命令

最佳答案

每个隔离都是单线程的。只要您的程序正在运行,其他任何人都无法干扰您的执行。

如果您希望能够对外部事件(包括来自其他隔离区的消息)使用react,您需要将长时间运行的执行拆分为更小的部分。国际象棋引擎可能已经有了一些状态,知道在哪里寻找下一步(假设它是用 A* 之类的东西构建的)。在这种情况下,您可以定期中断执行并在最小超时后恢复。

例子:

var state;
var stopwatch = new Stopwatch()..run();
void longRunning() {
  while (true) {
    doSomeWorkThatUpdatesTheState();
    if (stopwatch.elapsedMilliseconds > 200) {
      stopwatch.reset();
      Timer.run(longRunning);
      return;
    }
  }
}

关于dart - 如何终止长时间运行的隔离#2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492151/

相关文章:

Dart 隔离对共享对象实例的访问

Dart:如何在导入的包中指定隔离 URI?

flutter - 两个isolate通过端口发送消息会丢弃dart 2.5版本的一些消息

firebase-realtime-database - 使用Angular Dart显示Firebase数据库列表

image - 无法使用Flutter channel 共享文件-缺少插件异常

flutter - 如何在 Flutter 中取整一个数字?

dart - 关于 Dart Isolates 的最新文档

dart - 使用 isolate 提高应用程序性能

flutter - Flutter:更新ListView中的特定项目

javascript - Dart-JS 互操作 : JS object not loading when running in Dartium