zoukankan      html  css  js  c++  java
  • 单线程的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.异步处理并不是基于帧的轮巡,一个侦里可以执行多次定时器,但是会等待当前代码执行告一段落之后才被执行。而当前代码段,最长为一个帧,最短则不限。

  • 相关阅读:
    数组的基本操作
    面向对象
    继承
    JavaBean规范
    JVM内存模型
    数组的排序
    this
    访问控制权限
    数组
    方法的重载
  • 原文地址:https://www.cnblogs.com/xiaowai/p/2241017.html
Copyright © 2011-2022 走看看