Dart 如何终止长时间运行的隔离#2
我正在尝试理解如何将Java国际象棋引擎移植到dart 因此,我知道我应该使用一个隔离程序来与GUI并行运行我的引擎,但是如何强制引擎终止搜索呢 在java中,我只是设置了一些在引擎线程和gui线程之间共享的布尔值 我得到的答复是: 你应该给隔离装置发送一条信息,告诉它停止。您可以简单地执行以下操作: 发送端口(“停止”) 我的要求Dart 如何终止长时间运行的隔离#2,dart,dart-isolates,Dart,Dart Isolates,我正在尝试理解如何将Java国际象棋引擎移植到dart 因此,我知道我应该使用一个隔离程序来与GUI并行运行我的引擎,但是如何强制引擎终止搜索呢 在java中,我只是设置了一些在引擎线程和gui线程之间共享的布尔值 我得到的答复是: 你应该给隔离装置发送一条信息,告诉它停止。您可以简单地执行以下操作: 发送端口(“停止”) 我的要求 谢谢你的澄清。我不明白的是,如果国际象棋引擎隔离由于端口而繁忙。send('THINK')命令如何响应端口。send('STOP')命令每个隔离都是单线程的。只要你
谢谢你的澄清。我不明白的是,如果国际象棋引擎隔离由于端口而繁忙。send('THINK')命令如何响应端口。send('STOP')命令每个隔离都是单线程的。只要你的程序还在运行,其他人就没有办法干扰你的执行 如果您希望能够对外部事件(包括来自其他隔离的消息)做出反应,则需要将长时间运行的执行划分为较小的部分。一个国际象棋引擎可能已经有了一些状态,知道在哪里寻找下一步(假设它是用类似A*的东西构建的)。在这种情况下,您可以周期性地中断执行,并在最小超时后继续执行 例如:
var状态;
var stopwatch=new stopwatch()…run();
void longrung(){
while(true){
DoSomeWork更新了状态();
如果(stopwatch.elapsedMilliseconds>200){
秒表复位();
定时器运行(长时间运行);
返回;
}
}
}
新API将包含
isolate.kill(loopForever?isolate.IMMEDIATE:isolate.AS_事件);
有关完整示例,请参阅。它是否正常工作,您只是想了解底层流程,还是无法让它响应“停止”命令?