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

时间:2013-05-07 19:58:53

标签: dart dart-isolates

我试图理解如何将我的Java国际象棋引擎移植到飞镖。

所以我已经明白我应该使用Isolates和/或Futures与GUI并行运行我的引擎但是如何强制引擎终止搜索。

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

3 个答案:

答案 0 :(得分:3)

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

port.send('STOP');

要明确,隔离和期货是两回事,你用它们的方式不同。

当您希望某些代码在一个单独的“隔离内存堆”中真正并发运行时,请使用隔离。隔离就像一个迷你程序,与主程序分开运行。您发送隔离消息,您可以从隔离区接收消息。

如果您想在稍后提供值时收到通知,请使用将来。 “稍后”被定义为“事件循环中的未来滴答”。每个隔离区都有自己的事件循环。重要的是要理解只是要求Future运行一个函数不会使函数并行运行。它只是将函数放到事件循环中以便“稍后”运行。

答案 1 :(得分:1)

回答隐含的问题'我怎样才能在隔离中长时间运行任务以停止运行?'而不是更明确地询问&我如何使隔离终止,释放它的资源并且通常不再是?'

  • 将长时间运行的任务分解为更小,更短的运行单位。

  • 使用Future执行每个单元。链条期货酌情。

  • 提供每个单元在执行其逻辑之前应检查的标志。如果设置了标志,请保释。

  • 聆听'停止'如果/当收到消息并设置标志。

将主要处理任务拆分为Futures允许处理停止消息以在主要任务处理单元之前进入事件队列。

答案 2 :(得分:0)

现在有System.exit

  
      
  • 警告:此方法尚未实验,尚未在每个平台上处理。
  •