一直以来都期盼as3什么时候能够支持多线程,现在终于来了,特写了一个小demo,照搬别人的,helloworld级的,羞愧,····
001 | package |
002 | { |
003 | import flash.display.Sprite; |
004 | import flash.events.Event; |
005 | import flash.system.MessageChannel; |
006 | import flash.system.Worker; |
007 | import flash.system.WorkerDomain; |
008 | import flash.utils.setInterval; |
009 |
010 | public class WorkerTest extends Sprite |
011 | { |
012 | protected var mainToWorker:MessageChannel; |
013 | protected var workerToMain:MessageChannel; |
014 | protected var worker:Worker; |
015 |
016 | public function WorkerTest() |
017 | { |
018 | this .addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); |
019 | } |
020 |
021 | private function onAddedToStage(e:Event) : void |
022 | { |
023 | this .removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); |
024 |
025 | init(); |
026 | } |
027 |
028 | private function init() : void |
029 | { |
030 | if (Worker.current.isPrimordial) |
031 | { |
032 | worker = WorkerDomain.current.createWorker( this .loaderInfo.bytes); |
033 |
034 | mainToWorker = Worker.current.createMessageChannel(worker); |
035 | workerToMain = worker.createMessageChannel(Worker.current); |
036 |
037 | worker.setSharedProperty( "mainToWorker" , mainToWorker); |
038 | worker.setSharedProperty( "workerToMain" , workerToMain); |
039 |
040 | workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain); |
041 |
042 | worker.start(); |
043 |
044 | setInterval( |
045 | function () : void |
046 | { |
047 | //helloworld(); |
048 | count(); |
049 | }, |
050 | 2000 |
051 | ); |
052 | } |
053 | else |
054 | { |
055 | mainToWorker = Worker.current.getSharedProperty( "mainToWorker" ); |
056 | workerToMain = Worker.current.getSharedProperty( "workerToMain" ); |
057 |
058 | mainToWorker.addEventListener(Event.CHANNEL_MESSAGE, onMainToWorker); |
059 | } |
060 | } |
061 |
062 | protected function helloworld() : void |
063 | { |
064 | mainToWorker.send( "HELLO" ); |
065 | trace ( "[Main] HELLO " ); |
066 | } |
067 |
068 | protected function count() : void |
069 | { |
070 | mainToWorker.send( "ADD" ); |
071 | mainToWorker.send( 2 ); |
072 | mainToWorker.send( 5 ); |
073 |
074 | trace ( "[Main] ADD 2 + 5 ?" ); |
075 | } |
076 |
077 | protected function onMainToWorker(e:Event) : void |
078 | { |
079 | var msg:* = mainToWorker.receive(); |
080 |
081 | switch (msg) |
082 | { |
083 | case "HELLO" : |
084 | workerToMain.send( "WORLD" ); |
085 | break ; |
086 | case "ADD" : |
087 | var a: int = mainToWorker.receive(); |
088 | var b: int = mainToWorker.receive(); |
089 |
090 | workerToMain.send(a + b); |
091 | break ; |
092 | } |
093 | } |
094 |
095 | protected function onWorkerToMain(e:Event) : void |
096 | { |
097 | trace ( "[Worker] " + workerToMain.receive()); |
098 | } |
099 | } |
100 | } |
result:
1 | [Main] ADD 2 + 5 ? |
2 | [Worker] 7 |