Agregar multihilos a Flash; Flash workers;

/* Para desactivar el multihilo basta con comentar todo el código aquí y poner los publish settings en actionscript 11.2 Recordar que action script 11.4 es el que tiene el soporte para multihilo y que no se puede debuguear Para debuguear comentar todo el codigo de aqui y ponerlo en action script 11.2, es decir, desactivar el multihilo */ import flash.events.Event; import flash.net.registerClassAlias; import flash.system.MessageChannel; import flash.system.Worker; import flash.system.WorkerDomain; import flash.system.WorkerState; import flash.utils.ByteArray; import flash.system.Capabilities; //trace(Capabilities.version); var mainToWorker:MessageChannel; var workerToMain:MessageChannel; var workerToMainStartup:MessageChannel; if (flash.system.Worker.current.isPrimordial) { var swfBytes:ByteArray = this.loaderInfo.bytes; var bgWorker:flash.system.Worker = flash.system.WorkerDomain.current.createWorker(swfBytes,true); // Send to worker mainToWorker = Worker.current.createMessageChannel(bgWorker); bgWorker.setSharedProperty("mainToWorker", mainToWorker); // Receive from worker workerToMain = bgWorker.createMessageChannel(Worker.current); workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain); bgWorker.setSharedProperty("workerToMain", workerToMain); // Receive startup message from worker workerToMainStartup = bgWorker.createMessageChannel(Worker.current); workerToMainStartup.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMainStartup); bgWorker.setSharedProperty("workerToMainStartup", workerToMainStartup); function onWorkerToMain(ev:Event): void { var elementoRecibido:* = workerToMain.receive(true); //hacer algo que se ejecuta en el Main } function onWorkerToMainStartup(ev:Event): void { var elementoDeArranqueRecibido:* = workerToMainStartup.receive(true); //hacer algo que se ejecuta en el Main al arrancar el worker } bgWorker.start(); } else { function onMainToWorker(event:Event): void { hacerAlgo(); //hacer algún avance pequeño } mainToWorker = Worker.current.getSharedProperty("mainToWorker"); mainToWorker.addEventListener(Event.CHANNEL_MESSAGE, onMainToWorker); // Send to main workerToMain = Worker.current.getSharedProperty("workerToMain"); // Send startup message to main workerToMainStartup = Worker.current.getSharedProperty("workerToMainStartup"); } //generalmente utilizo funciones como variables que me permiten reemplazar las versiones multihilo por las versiones síncronas en cualquier momento var hacerAlgo:Function; //en la sección multihilo usaría function hacerAlgo_VersionAsincrona():void { //aquí va lo que se hace realmente se hace var algunObjeto:* = "lo que sea"; mainToWorker.send(algunObjeto); }

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.