3

をワーカーByteArray.clear()と共有しても何もしないようです。ByteArray例として、次のコードを取り上げます。

package 
{
    import flash.display.Sprite;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.utils.ByteArray;

    public class Main extends Sprite 
    {
        private var _worker:Worker;

        public function Main():void 
        {
            if (Worker.current.isPrimordial)
            {
                initMain();
            }
            else
            {
                initWorker();
            }
        }

        private function initMain():void 
        {
            _worker = WorkerDomain.current.createWorker(loaderInfo.bytes, true);

            var bytes:ByteArray = new ByteArray();
            bytes.writeUnsignedInt(12836439);
            bytes.shareable = true;
            _worker.setSharedProperty("bytes", bytes);
            bytes.clear();
            trace(bytes.length);
        }

        private function initWorker():void
        {
            //worker stuff would go here
        }

    }

}

これはトレースします4が、そうあるべきです0bytes.shareable = true;または のいずれかをコメントアウトすると、完全に機能しますが、組み合わせによってメソッド_worker.setSharedProperty("bytes", bytes);が無効になっているようです。clear()

ただし、興味深いことに、これは AIR 用にコンパイルする場合にのみ発生します。Flash Player 用にコンパイルする場合、クリアは正常に機能し、このコードはトレースし0ます。

何が起きているか知っている人はいますか?

4

0 に答える 0