我正在使用FDT6中的AS3項目。我正在使用最新的FLEX 4.6和AIR 3.7。可以MessageChannel溢出
我有一個worker.swf文件嵌入到主應用程序中,以執行線程工作。
我使用MessageChannel類在兩者之間傳遞信息。
在我的主類我已經在我只發送郵件的mainToWorker定義
private var mainToWorker:MessageChannel;
private var workerToMain:MessageChannel;
mainToWorker = Worker.current.createMessageChannel(worker);
workerToMain = worker.createMessageChannel(Worker.current);
。在這些消息中,我發送一個字節的信息數組。該信息是一個包含'command'屬性和'props'屬性的對象。基本上就像一個函數調用一樣。該命令是一個函數名稱,道具是一個包含該函數數據的對象。
mainToWorkerMutex.lock();
mainToWorker.send(ByteArrayUtils.ObjectToByteArray({command:"DoSomething", props:{propA:1,propB:7}}));
mainToWorkerMutex.unlock();
workerToMain var同樣發生,除了我只發送包含'message'和'props'參數的字節數據。
workerToMainMutex.lock();
workerToMain.send(ByteArrayUtils.ObjectToByteArray({command:"complete", props:{return:"result"}}));
workerToMainMutex.unlock();
作爲一個健全的檢查,我確保消息渠道得到他們應該得到的。
當我在FDT中構建它時,它工作的很好,但是當它使用通過flash構建器的ANT腳本構建時,我有時會收到通過workerToMain通道返回的「命令」事件。
我通過消息通道發送了很多數據。有可能我重載了它並導致緩衝區溢出到另一個消息通道?那怎麼可能只發生在FB?
我已經檢查了我的代碼很多次,並且我確信在我自己的代碼中沒有任何內容將該消息發送回去。
作爲一個說明,我只是試圖在FDT之外的Web瀏覽器中運行正在運行的FDT,它看起來已經壞了。所以看起來FDT有一些問題與消息通道類有關,他們的SWF查看器已經得到了解決。 –
也許由於在瀏覽器中從FDT運行SWF導致了一個問題,您應該也會看到在FDT swf播放器中運行或不運行時是否運行由ant腳本構建的swf。這樣您就可以確定它是否與執行(運行時)或編譯的上下文相關。 – shaunhusain
根據文檔,您不應直接實例化這些文檔:您不通過調用MessageChannel()構造函數直接創建MessageChannel實例。要創建MessageChannel實例,請調用將在該通道上發送消息的Worker對象的createMessageChannel()方法,並將接收的Worker對象作爲參數傳遞。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/MessageChannel.html – shaunhusain