Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何终止长时间运行的隔离#2_Dart_Dart Isolates - Fatal编程技术网

Dart 如何终止长时间运行的隔离#2

Dart 如何终止长时间运行的隔离#2,dart,dart-isolates,Dart,Dart Isolates,我正在尝试理解如何将Java国际象棋引擎移植到dart 因此,我知道我应该使用一个隔离程序来与GUI并行运行我的引擎,但是如何强制引擎终止搜索呢 在java中,我只是设置了一些在引擎线程和gui线程之间共享的布尔值 我得到的答复是: 你应该给隔离装置发送一条信息,告诉它停止。您可以简单地执行以下操作: 发送端口(“停止”) 我的要求 谢谢你的澄清。我不明白的是,如果国际象棋引擎隔离由于端口而繁忙。send('THINK')命令如何响应端口。send('STOP')命令每个隔离都是单线程的。只要你

我正在尝试理解如何将Java国际象棋引擎移植到dart

因此,我知道我应该使用一个隔离程序来与GUI并行运行我的引擎,但是如何强制引擎终止搜索呢

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

我得到的答复是: 你应该给隔离装置发送一条信息,告诉它停止。您可以简单地执行以下操作:

发送端口(“停止”)

我的要求
谢谢你的澄清。我不明白的是,如果国际象棋引擎隔离由于端口而繁忙。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_事件);

有关完整示例,请参阅。

它是否正常工作,您只是想了解底层流程,还是无法让它响应“停止”命令?