3

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

所以我明白我应该使用 Isolates 和/或 Futures 来与 GUI 并行运行我的引擎,但是我怎样才能强制引擎终止搜索。

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

4

3 回答 3

3

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

port.send('STOP');

需要明确的是,isolates 和 futures 是两个不同的东西,你使用它们的方式也不同。

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

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

于 2013-05-08T03:58:44.357 回答
1

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

  • 将长期运行的任务分解成更小、更短的运行单元。

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

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

  • 收听“停止”消息并在收到时设置标志。

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

于 2014-08-03T17:23:15.300 回答
0

现在有iso.Isolate.kill()

  • 警告:此方法是实验性的,尚未在每个平台上处理。
于 2015-06-03T07:27:14.453 回答