work
...
@author lizhi
♥0 |
Line 62 |
Modified 2016-03-01 18:53:11 |
MIT License
archived:2017-03-20 15:33:08
ActionScript3 source code
/**
* Copyright lizhi ( http://wonderfl.net/user/lizhi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/0QPH
*/
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.system.MessageChannel;
import flash.system.Worker;
import flash.system.WorkerDomain;
import flash.utils.ByteArray;
/**
* ...
* @author lizhi
*/
public class Test extends Sprite
{
private var bgWorker:Worker;
private var shareBytes:ByteArray;
private var messagePrimordial2BG:MessageChannel;
private var messageBG2Primordial:MessageChannel;
public function Test()
{
if(Worker.current.isPrimordial){
stage.addEventListener(MouseEvent.CLICK, stage_click);
bgWorker = WorkerDomain.current.createWorker(this.loaderInfo.bytes);
bgWorker.start();
//第一种方式传递数据共享bytearray
shareBytes = new ByteArray;
shareBytes.shareable = true;
shareBytes.writeByte(0);
bgWorker.setSharedProperty("test2", shareBytes);
//第二种传递数据方式单向传递消息泪messagechannel,接收方用事件侦听,receive方法得到数据。发送方用send发送数据
messagePrimordial2BG = Worker.current.createMessageChannel(bgWorker);
bgWorker.setSharedProperty("test3", messagePrimordial2BG);
messageBG2Primordial=bgWorker.createMessageChannel(Worker.current);
bgWorker.setSharedProperty("test4", messageBG2Primordial)
messageBG2Primordial.addEventListener(Event.CHANNEL_MESSAGE, messageBG2Primordial_channelMessage);
}else {
addEventListener(Event.ENTER_FRAME, enterFrame);
shareBytes = Worker.current.getSharedProperty("test2") as ByteArray;
messagePrimordial2BG = Worker.current.getSharedProperty("test3") as MessageChannel;
messagePrimordial2BG.addEventListener(Event.CHANNEL_MESSAGE, messagePrimordial2BG_channelMessage);
messageBG2Primordial = Worker.current.getSharedProperty("test4") as MessageChannel;
messageBG2Primordial.send("后台worker向主worker发送的数据");
}
}
private function messageBG2Primordial_channelMessage(e:Event):void
{
trace("主worker接到了数据:",messageBG2Primordial.receive());
}
private function messagePrimordial2BG_channelMessage(e:Event):void
{
trace("后台worker接到了数据:",messagePrimordial2BG.receive());
}
private function enterFrame(e:Event):void
{
//后台worker每一帧设置共享bytearray
shareBytes.position = 0;
shareBytes.writeByte(100 * Math.random());
//第三种方式简单设置一个共享属性
Worker.current.setSharedProperty("test",100*Math.random());
}
private function stage_click(e:MouseEvent):void
{
trace("getSharedProperty",bgWorker.getSharedProperty("test"));
shareBytes.position = 0;
trace("sharebytes", shareBytes.readByte());
messagePrimordial2BG.send(100*Math.random());
}
}
}