Flash worker - 示例应用程序无法正常工作

时间:2013-05-10 13:50:42

标签: actionscript-3 flash worker

我正试图抓住AS3工作人员的责任,但必须有一些难以捉摸的理解才能逃脱我。

我已经构建了一个相当简单的PoC,看看它应该如何工作,但没有运气。当我运行“主”SWF时,它似乎可以加载工作者SWF并且顺利完成所有操作,除非血腥工作者没有响应。

我正在使用Flash Builder 4.6和FlexSDK 4.9.1,PoC项目是作为ActionScript项目构建的。

工人档案:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.system.MessageChannel;
    import flash.system.Worker;

    public class WorkerPOC extends Sprite
    {

        private var wToM:MessageChannel;
        private var mToW:MessageChannel;

        public function WorkerPOC()
        {
            wToM = Worker.current.getSharedProperty("wToM") as MessageChannel;
            mToW = Worker.current.getSharedProperty("mToW") as MessageChannel;
            trace(mToW.receive());
            wToM.send("Ready");
        }
    }
}

主文件:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.utils.ByteArray;

    public class WorkerMaster extends Sprite
    {

        private var workerLoader:URLLoader;
        private var workerData:ByteArray;

        private var worker:Worker;

        private var wToM:MessageChannel;
        private var mToW:MessageChannel;

        public function WorkerMaster()
        {
            workerLoader = new URLLoader();
            workerLoader.dataFormat = URLLoaderDataFormat.BINARY;
            addEventListener(Event.ADDED_TO_STAGE, onAdded);
        }

        private function onAdded(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);
            workerLoader.addEventListener(Event.COMPLETE, onHasWorker);
            workerLoader.load(new URLRequest("workers/WorkerPOC.swf"));
        }

        private function onHasWorker(event:Event):void
        {
            workerData = workerLoader.data as ByteArray;
            workerData.shareable = true;
            worker = WorkerDomain.current.createWorker(workerData);
            wToM = worker.createMessageChannel(Worker.current);
            wToM.addEventListener(Event.CHANNEL_MESSAGE, onMessage);
            wToM.addEventListener(Event.CHANNEL_STATE, onState);
            mToW = Worker.current.createMessageChannel(worker);
            worker.setSharedProperty("wToM",wToM);
            worker.setSharedProperty("mToW",mToW);
            worker.start();
            mToW.send(123);
        }

        private function onState(event:Event):void
        {
            trace("Channel state: ", wToM.state);
        }

        private function onMessage(event:Event):void
        {
            trace(wToM.receive());
        }

    }
}

2 个答案:

答案 0 :(得分:1)

听起来很奇怪,但你已经申请了

-swf-verion=XXX    // XXX must be > 17

作为编译器参数?我问这个,因为我有一个非常相似的问题:) Workers in Apache Flex 4.7

答案 1 :(得分:1)

我也和工人一起工作过。我让他们工作了一段时间然后一切都有点停止了,就像你的工作不一样。

看起来messagechannel没有在11.7中的调试中正确发送消息。

不确定为什么会发生这种情况,但是在创建工作程序时尝试运行代码而不连接调试器。当我这样做它工作正常......