单线程的AS3是如何处理异步事件的

AS3是单线程执行代码。包括事件的响应执行也是单线程的。但它可以调用宿主的多线程,产生一些异步事件。比如load。

现在不清楚的是,如果是单线程,当load请求返回来之时,AS3正在执行当前的语句系列,那是否会在当前插入响应语句,还是会等当前代码执行完成之后再响应语句。
比如当load请求回来之时,我的for(i=0;i<1000000000000000;i++){...}正在for到i=50000000,如果这时响应load请求,是否会先挂起当前的for语句,去响应完load之后再回来,还是会先for完全部再去执行响应。再如果,这时load的响应语句里,将i重置为0,是否会引响到当前for的执行呢?

import flash.utils.setTimeout;
import flash.utils.setInterval;

private var i:uint = 0;
private function init():void{
setTimeout(addEvent,1000);
}
private function addEvent():void{
stage.frameRate = 1;
stage.addEventListener(Event.ENTER_FRAME,enterFrame);
setTimeout(loop,1);
var s:String="";
for(var k:uint=0;k<555555;k++){
s += "afdsffsfdsafdsfsdfdsfdsf";
trace("+++++"+ k + "+++++++");
}
}
private function loop():void{
trace("=====");
}
private function enterFrame(event:Event):void{
i++;
trace(i);
}

做了一个测试,得出两个结论:
1.当AS要跳到下一帧时,会先检查当前所有代码是否都已经执行完。如果没有执行完,会强行的延长帧的时间。
2.异步处理并不是基于帧的轮巡,一个侦里可以执行多次定时器,但是会等待当前代码执行告一段落之后才被执行。而当前代码段,最长为一个帧,最短则不限。

posted on 2011-11-08 13:28 lzosi 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/xiaowai/archive/2011/11/08/2241017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值