2013-05-10 87 views
5

我想了解如何将我的Java国际象棋引擎移植到dart。如何终止长时间运行的隔离#2

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

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

回答我:

你应该将消息发送到隔离,告诉它停下来。你可以简单地做这样的事情:

port.send('STOP');

我的请求

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

+0

它是否正在工作,您只是想了解底层进程,或者您是否无法响应“STOP”命令? – 2013-05-10 23:59:35

回答

7

每个隔离区都是单个-threaded。只要你的程序正在运行,其他人就无法干预你的执行。

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

实施例:

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

好吧,我明白了...非常感谢! – 2013-05-11 06:17:39

相关问题