我试图理解如何将我的Java国际象棋引擎移植到飞镖。
所以我已经明白我应该使用Isolates和/或Futures与GUI并行运行我的引擎但是如何强制引擎终止搜索。
在java中我只是设置了一些boolean,它在引擎线程和gui线程之间共享。
答案 0 :(得分:3)
您应该向隔离区发送一条消息,告诉它停止。您可以简单地执行以下操作:
port.send('STOP');
要明确,隔离和期货是两回事,你用它们的方式不同。
当您希望某些代码在一个单独的“隔离内存堆”中真正并发运行时,请使用隔离。隔离就像一个迷你程序,与主程序分开运行。您发送隔离消息,您可以从隔离区接收消息。
如果您想在稍后提供值时收到通知,请使用将来。 “稍后”被定义为“事件循环中的未来滴答”。每个隔离区都有自己的事件循环。重要的是要理解只是要求Future运行一个函数不会使函数并行运行。它只是将函数放到事件循环中以便“稍后”运行。
答案 1 :(得分:1)
回答隐含的问题'我怎样才能在隔离中长时间运行任务以停止运行?'而不是更明确地询问&我如何使隔离终止,释放它的资源并且通常不再是?'
将长时间运行的任务分解为更小,更短的运行单位。
使用Future
执行每个单元。链条期货酌情。
提供每个单元在执行其逻辑之前应检查的标志。如果设置了标志,请保释。
聆听'停止'如果/当收到消息并设置标志。
将主要处理任务拆分为Futures允许处理停止消息以在主要任务处理单元之前进入事件队列。
答案 2 :(得分:0)
现在有System.exit
- 警告:此方法尚未实验,尚未在每个平台上处理。