2

さて、Clojure にこの小さな手続き型 SVG エディターがあります。

ユーザーが SVG ドキュメントを生成するコードを作成するコード ペインと、プレビュー ペインがあります。コードが変更されるたびに、プレビュー ペインが更新されます。

現時点では、テキスト変更イベントで、コードが UI スレッド (Ewwww!) で再コンパイルされ、プレビュー ペインが更新されます。代わりに、コンパイルのステップは非同期で行われるべきであり、エージェントはその問題に対する良い答えのようです。更新時にコードを再コンパイルするようにエージェントに依頼し、結果を画像ペインに渡します。

私はまだエージェントを使用したことがなく、それらが暗黙のキューで機能するかどうかもわかりませんが、おそらくそうだと思います。私の場合、「中間」ステップの計算にはまったく関心がありません (高速なキーストロークについて考えてみてください。再コンパイルが開始される前にキーストロークが発生した場合は、再コンパイルを破棄したいだけです)。つまりsend、保留中のエージェントを上書きしたいのです。計算。

どうすればそれを実現できますか?ヒントはありますか?それともコードサンプル?私のとりとめのないことは理にかなっていますか?

ありがとう!

4

2 に答える 2

2

エージェントは実際にキューで動作するため、各関数はエージェントの状態を取得し、エージェントの次の状態を生成します。エージェントは ID を経時的に追跡します。これは必要以上に聞こえるかもしれませんが、アトムはタスクにより適していて、非常によく似た方法で使用されます。

于 2012-04-25T20:44:39.077 に答える
2

共有状態管理ではなく、実行フロー制御を扱う問題について説明します。したがって、STM をしばらく離れて、先物を調べることをお勧めします。これらはまだエージェントとしてスレッド プールで実行されますが、エージェントの代わりに、を呼び出しfuture-cancelてステータスを検査することで停止できますfuture-cancelled?

future が実行しているスレッドを効果的に停止できるという強い保証はありません。それでも、コードは未来をキャンセルしようとし、次の再コンパイルのスケジュールに進むことができます。

于 2012-04-25T21:06:53.280 に答える