博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
As3多线程
阅读量:6950 次
发布时间:2019-06-27

本文共 5440 字,大约阅读时间需要 18 分钟。

As3可以使用多线程加载资源,要求11.4以上,需要导入easyWorker.swc。

下面的例子是子线程上捕获计算机的时间,并将其发送到主线程上并显示:

子线程:

package worker

{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.registerClassAlias;
import flash.system.MessageChannel;
import flash.system.Worker;
import flash.utils.Timer;
import worker.vo.TimeVo;
/**
* ...
* @author me
*/
public class TimeWorker extends Sprite
{
private var _commandChannel:MessageChannel;
private var _returnChannel:MessageChannel;
public function TimeWorker()
{
init();
}
private function init():void
{
registerClassAlias("worker.vo.TimeVo", TimeVo);
_commandChannel = Worker.current.getSharedProperty("commandChannel") as MessageChannel;
_commandChannel.addEventListener(Event.CHANNEL_MESSAGE, onMessageChannel);
_returnChannel = Worker.current.getSharedProperty("returnChannel") as MessageChannel;
}
private function onMessageChannel(e:Event):void
{
if (!_commandChannel.messageAvailable)
{
return;
}
var message:Array = _commandChannel.receive() as Array;
if (message && message[0] == "start")
{
startTime();
}
}
private var _timer:Timer;
private function startTime():void
{
if (!_timer)
{
_timer = new Timer(1);
_timer.addEventListener(TimerEvent.TIMER, onTimer);
_timer.start();
}
}
private function onTimer(e:TimerEvent):void
{
var date:Date = new Date();
var timeVo:TimeVo = new TimeVo();
timeVo.fromDate(date);
_returnChannel.send(timeVo);
}
}

}

主线程:

package worker

{
import flash.display.Sprite;
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.text.TextField;
import flash.text.TextFormat;
import flash.utils.ByteArray;
import worker.vo.TimeVo;
/**
* ...
* @author me
*/
public class BaseWorker extends Sprite
{
[Embed(source = "E://HelloWorld/New Project/bin/TimeWorker.swf", mimeType = "application/octet-stream")]
private static var TimeWorkerSwf:Class;
private var _timeWorker:Worker;
private var _timeWorkerCommandChannel:MessageChannel;
private var _returnChannel:MessageChannel;
private var _timeTxt:TextField;
public function BaseWorker()
{
init();
}
private function init():void
{
registerClassAlias("worker.vo.TimeVo", TimeVo);
_timeWorker = WorkerDomain.current.createWorker(timeWorkerBytes);
_timeWorkerCommandChannel = Worker.current.createMessageChannel(_timeWorker);
_timeWorker.setSharedProperty("commandChannel", _timeWorkerCommandChannel);
_returnChannel = _timeWorker.createMessageChannel(Worker.current);
_returnChannel.addEventListener(Event.CHANNEL_MESSAGE, onMessageChannel);
_timeWorker.setSharedProperty("returnChannel", _returnChannel);
_timeWorker.addEventListener(Event.WORKER_STATE, onWorkerState);
_timeWorker.start();
}
private function initTxt():void
{
_timeTxt = new TextField();
_timeTxt.width = 200;
var tf:TextFormat = new TextFormat();
tf.font = "微软雅黑";
tf.size = 16;
_timeTxt.defaultTextFormat = tf;
_timeTxt.x = stage.stageWidth / 2 - 100;
_timeTxt.y = stage.stageHeight / 2;
addChild(_timeTxt);
}
private function onWorkerState(e:Event):void
{
if (_timeWorker.state == WorkerState.RUNNING)
{
_timeWorkerCommandChannel.send(["start"]);
}
}
private function onMessageChannel(e:Event):void
{
var vo:TimeVo = _returnChannel.receive() as TimeVo;
if (vo)
{
if (!_timeTxt)
{
initTxt();
}
_timeTxt.text = vo.toString();
}
}
private static function get timeWorkerBytes():ByteArray
{
return new TimeWorkerSwf();
}
}

}

TimeVo:

package worker.vo

{
import utils.NumTool;
/**
* ...
* @author me
*/
public class TimeVo
{
private var _year:int;
private var _month:int;
private var _day:int;
private var _hour:int;
private var _minuter:int;
private var _second:int;
private var _millSecond:int;
public function TimeVo(year:int = 0, month:int = 0, day:int = 0, hour:int = 0, minuter:int = 0, second:int = 0, millSecond:int = 0)
{
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minuter = minuter;
this.second = second;
this.millSecond = millSecond;
}
public function get year():int
{
return _year;
}
public function set year(value:int):void
{
_year = value;
}
public function get month():int
{
return _month;
}
public function set month(value:int):void
{
_month = value;
}
public function get day():int
{
return _day;
}
public function set day(value:int):void
{
_day = value;
}
public function get hour():int
{
return _hour;
}
public function set hour(value:int):void
{
_hour = value;
}
public function get minuter():int
{
return _minuter;
}
public function set minuter(value:int):void
{
_minuter = value;
}
public function get second():int
{
return _second;
}
public function set second(value:int):void
{
_second = value;
}
public function get millSecond():int
{
return _millSecond;
}
public function set millSecond(value:int):void
{
_millSecond = value;
}
public function fromDate(date:Date):void
{
this.year = date.getFullYear();
this.month = date.getMonth() + 1;
this.day = date.getDate();
this.hour = date.getHours();
this.minuter = date.getMinutes();
this.second = date.getSeconds();
this.millSecond = date.getMilliseconds();
}
public function toString():String
{
return year + "." + NumTool.fill(month, 2) + "." + NumTool.fill(day, 2) + " " + NumTool.fill(hour, 2) + ":" + NumTool.fill(minuter, 2) + ":" + NumTool.fill(second, 2) + ":" + this.millSecond;
}
}

}

注意:先编译子线程生成TimeWorker.swf,再嵌入主线程中

转载于:https://www.cnblogs.com/chinayfhuang/p/7656031.html

你可能感兴趣的文章
uip中关于web服务器的简单例子
查看>>
Windows 10 ADK 1809 的变更 附下载地址
查看>>
修改win7和win8 preview双系统的开机默认启动项
查看>>
关于PHP_CMS的一点感想
查看>>
知乎[披萨不就是个大饼铺点肉]问题延伸出的认知风格相关知识
查看>>
新浪微博基于混合云的PHP服务化与弹性扩容
查看>>
centOS7封装
查看>>
通过php 执行git pull 自动部署
查看>>
google乱码 IE浏览器 英文
查看>>
Linux查看系统配置常用命令
查看>>
销售型网站把握的设计要点
查看>>
我的友情链接
查看>>
mongodb数据备份和还原
查看>>
VM虚拟机下安装Centos7.0图文教程
查看>>
我的友情链接
查看>>
编译安装php-5.6.19出现的问题configure: error: mysql configure failed. Please check config.log...
查看>>
第三方登录之QQ登录(一)——QQ互联开放平台新建应用
查看>>
MyBatis mapper.xml处理sql中的 大于,小于,大于等于,小于等于
查看>>
java 受检异常和非受检异常
查看>>
GC垃圾回收机制
查看>>