Gun*_*app 5 dart dart-isolates
我试图了解如何将我的Java国际象棋引擎移植到飞镖.
所以我理解我应该使用Isolates与GUI并行运行我的引擎,但是如何强制引擎终止搜索.
在java中我只是设置了一些boolean,它在引擎线程和gui线程之间共享.
您应该向隔离发送消息,告诉它停止.您可以简单地执行以下操作:
port.send( 'STOP');
谢谢你的澄清.我不明白的是,如果因为port.send('THINK')命令而导致国际象棋引擎隔离,它如何响应port.send('STOP')命令
每个隔离都是单线程的.只要您的程序正在运行,其他任何人都无法干扰您的执行.
如果您希望能够对外部事件(包括来自其他隔离区的消息)做出反应,则需要将长时间运行的执行拆分为更小的部分.国际象棋引擎可能已经有一些状态知道在哪里寻找下一步(假设它是用A*之类的东西建造的).在这种情况下,您可以定期中断执行并在最小超时后恢复.
例:
var state;
var stopwatch = new Stopwatch()..run();
void longRunning() {
while (true) {
doSomeWorkThatUpdatesTheState();
if (stopwatch.elapsedMilliseconds > 200) {
stopwatch.reset();
Timer.run(longRunning);
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
新的 API 将包含
isolate.kill(loopForever ? Isolate.IMMEDIATE : Isolate.AS_EVENT);
Run Code Online (Sandbox Code Playgroud)
有关完整示例,请参阅https://code.google.com/p/dart/issues/detail?id=21189#c4 。
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |