Java チェス エンジンをダーツに移植する方法を理解しようとしています。
したがって、Isolates や Futures を使用してエンジンを GUI と並行して実行する必要があることを理解しましたが、エンジンに強制的に検索を終了させるにはどうすればよいでしょうか。
Java では、エンジン スレッドと GUI スレッドの間で共有されるブール値を設定しました。
Java チェス エンジンをダーツに移植する方法を理解しようとしています。
したがって、Isolates や Futures を使用してエンジンを GUI と並行して実行する必要があることを理解しましたが、エンジンに強制的に検索を終了させるにはどうすればよいでしょうか。
Java では、エンジン スレッドと GUI スレッドの間で共有されるブール値を設定しました。
アイソレートにメッセージを送信して、停止するように指示する必要があります。次のようなことが簡単にできます。
port.send('STOP');
明確にするために言うと、分離株と先物は 2 つの異なるものであり、使い方も異なります。
一部のコードを別の「分離メモリ ヒープ」で実際に同時に実行する場合は、isolate を使用します。分離は、メイン プログラムとは別に実行されるミニ プログラムのようなものです。アイソレート メッセージを送信し、アイソレートからメッセージを受信できます。
後で値が使用可能になったときに通知を受けたい場合は、future を使用します。「後で」は、「イベント ループ内の将来のティック」として定義されます。各分離には、独自のイベント ループがあります。Future に関数を実行するように要求するだけでは、関数が並列に実行されないことを理解することが重要です。「後で」実行されるイベントループに関数を配置するだけです。
「Isolate で長時間実行されているタスクの実行を停止するにはどうすればよいですか?」という暗黙の質問への回答 「Isolate を終了させ、そのリソースを解放し、一般的に停止させるにはどうすればよいですか?」というより明確な質問ではなく、
長時間実行されるタスクを、実行時間の短い、より小さな単位に分割します。
で各ユニットを実行しFuture
ます。必要に応じて先物をチェーンします。
各ユニットがそのロジックを実行する前にチェックする必要があるフラグを提供します。フラグが設定されている場合は、保釈します。
「停止」メッセージをリッスンし、受信した場合にフラグを設定します。
メイン処理タスクを Future に分割することで、メイン タスクの処理単位よりも先に停止メッセージの処理をイベント キューに入れることができます。