2013-05-10 11 views
5

Java Chessエンジンをダーツに移植する方法を理解しようとしています。長時間実行されている分離版を終了する方法#2

私は、エンジンをパラレルでGUIで実行するためにアイソレートを使用する必要があることを理解しましたが、エンジンを強制的に検索を終了させることができます。

Javaでは、ちょうどエンジンスレッドとGUIスレッドの間で共有されるブール値を設定します。私が得た

回答:

あなたは停止するようにそれを言って、分離株にメッセージを送信する必要があります。あなたは単に次のようなことをすることができます:

port.send( 'STOP');明確化のため

マイリクエスト

感謝。私が理解していないことは、port.send( 'THINK')コマンドによってチェスエンジンが分離している場合、どのようにport.send( 'STOP')コマンドに応答できるのかです。

+0

基本的なプロセスを理解しようとしているだけで、「STOP」コマンドに応答できないことがありますか? –

答えて

7

それぞれの分離は単一です - スレッド。あなたのプログラムが実行されている限り、他に誰も実行を妨げる手段はありません。

外部のイベント(他の分離株からのメッセージを含む)に反応できるようにするには、長期実行をより小さな部分に分割する必要があります。チェスエンジンは、おそらく、A *のようなもので構築されていると仮定して、次の動きを探す場所を知っている状態になっているでしょう。この場合、最小限のタイムアウト後に定期的に実行を中断して再開することができます。

例:

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

私はそれを得る...多くのありがとう! –

関連する問題