FDT6 で AS3 プロジェクトに取り組んでいます。最新の FLEX 4.6 と AIR 3.7 を使用しています。
スレッド処理を行うためにメイン アプリケーションに埋め込まれた worker.swf ファイルがあります。
MessageChannel クラスを使用して、2 つの間で情報を渡します。
メインクラスで私が定義した
private var mainToWorker:MessageChannel;
private var workerToMain:MessageChannel;
mainToWorker = Worker.current.createMessageChannel(worker);
workerToMain = worker.createMessageChannel(Worker.current);
mainToWorker では、メッセージのみを送信します。これらのメッセージでは、情報のバイト配列を送信します。情報は、'command' プロパティと 'props' プロパティを含むオブジェクトです。基本的に関数呼び出しのように動作します。command は関数名であり、props はその関数のデータを含むオブジェクトです。
mainToWorkerMutex.lock();
mainToWorker.send(ByteArrayUtils.ObjectToByteArray({command:"DoSomething", props:{propA:1,propB:7}}));
mainToWorkerMutex.unlock();
「message」および「props」パラメーターを含むバイトデータのみを送信することを除いて、workerToMain 変数でも同じことが起こります。
workerToMainMutex.lock();
workerToMain.send(ByteArrayUtils.ObjectToByteArray({command:"complete", props:{return:"result"}}));
workerToMainMutex.unlock();
健全性チェックとして、メッセージ チャネルが必要なものを取得していることを確認します。
FDT でビルドすると正常に動作しますが、フラッシュ ビルダーを介して ANT スクリプトを使用してビルドすると、workerToMain チャネルで「コマンド」イベントが返されることがあります。
メッセージチャネルを介して大量のデータを送信しています。それを過負荷にして、他のメッセージチャネルにバッファオーバーフローを引き起こしている可能性はありますか? どうしてそれが FB だけで起こっているのでしょうか?
私は自分のコードを何度もチェックしましたが、自分のコードにはそのメッセージを送り返しているものは何もないと確信しています。