首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何终止长时间运行的隔离#2

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

Stack Overflow用户
提问于 2013-05-11 07:25:27
回答 2查看 376关注 0票数 5

我正在尝试理解如何将我的Java象棋引擎移植到dart。

因此,我知道我应该使用隔离来运行我的引擎与GUI并行,但我如何才能强制引擎终止搜索。

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

我得到的答案是:

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

port.send('STOP');

我的请求

谢谢你的澄清。我不明白的是,如果国际象棋引擎隔离由于思考(‘port.send’)命令而繁忙,它如何响应停止(‘port.send’)命令

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-12 13:22:16

新的API将包含一个

代码语言:javascript
复制
isolate.kill(loopForever ? Isolate.IMMEDIATE : Isolate.AS_EVENT); 

有关完整示例,请参阅https://code.google.com/p/dart/issues/detail?id=21189#c4

票数 2
EN

Stack Overflow用户

发布于 2013-05-11 08:25:28

每个隔离都是单线程的。只要你的程序在运行,其他人就不会有办法干扰你的执行。

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

示例:

代码语言:javascript
复制
var state;
var stopwatch = new Stopwatch()..run();
void longRunning() {
  while (true) {
    doSomeWorkThatUpdatesTheState();
    if (stopwatch.elapsedMilliseconds > 200) {
      stopwatch.reset();
      Timer.run(longRunning);
      return;
    }
  }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16492151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档