我试图了解如何将我的 Java 国际象棋引擎移植到 dart。
所以我明白我应该使用 Isolates 来与 GUI 并行运行我的引擎,但是如何强制引擎终止搜索。
在java中,我只是设置了一些在引擎线程和gui线程之间共享的 bool 值。
我得到的答案:
您应该向隔离发送消息,告诉它停止。您可以简单地执行以下操作:
port.send('停止');
我的请求
感谢您的澄清。我不明白的是,如果国际象棋引擎隔离因 port.send('THINK') 命令而忙碌,它如何响应 port.send('STOP') 命令
最佳答案
每个隔离都是单线程的。只要您的程序正在运行,其他任何人都无法干扰您的执行。
如果您希望能够对外部事件(包括来自其他隔离区的消息)使用react,您需要将长时间运行的执行拆分为更小的部分。国际象棋引擎可能已经有了一些状态,知道在哪里寻找下一步(假设它是用 A* 之类的东西构建的)。在这种情况下,您可以定期中断执行并在最小超时后恢复。
例子:
var state;
var stopwatch = new Stopwatch()..run();
void longRunning() {
while (true) {
doSomeWorkThatUpdatesTheState();
if (stopwatch.elapsedMilliseconds > 200) {
stopwatch.reset();
Timer.run(longRunning);
return;
}
}
}
关于dart - 如何终止长时间运行的隔离#2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492151/