也许这是一个先进后出的堆栈:对于同一个cpu时刻内推入定时器的队列(并且动作的定时间隔相同的才推入同一个堆栈),则下一次执行的顺序会倒过来:setInterval("producer()", pspeed);
setInterval("consumer()", cspeed);>>>>>
producer();
consumer();consumer();
producer();producer();
consumer();consumer();
producer();...........仅仅是猜测,没有找到切实证据,呵呵

解决方案 »

  1.   

    我是说,三个setInterval()是同时运行的吗?
      

  2.   

    理论上肯定不是啊,setInterval执行也要时间的啊
      

  3.   

    push producer(1) 进定时队列
    push producer(2) 进定时队列
    push producer(3) 进定时队列
    pop producer(3)
    执行producer(3)
    push producer(3) //为了下次定时pop producer(2)
    执行producer(2)
    push producer(2) //为了下次定时pop producer(1)
    执行producer(1)
    push producer(1) //为了下次定时//以上存属于猜测
      

  4.   

    如何解释下面这个呢?
    setInterval("producer(1)",1000);
    setInterval("producer(2)",1000);
    for(j=0;j<10000;j++);
    setInterval("producer(3)",1000);
      

  5.   

    setInterval本身执行需要时间
    这样几个setInterval设定的时间就有先后了
      

  6.   

    <span id=d></span>
    <script>
    function producer(i)
    {
    d.innerHTML = d.innerHTML + i + "<br/>";
    }
    setInterval("producer(1)",1000);
    setInterval("producer(2)",1000);
    for(j=0;j<5;j++);
    setInterval("producer(" + j + ")",1000);</script>//看看这个,好像被优化掉了
      

  7.   

    可能是CPU把相隔很近的同一个函数调用压入堆栈吧,这个时间就是完成一个函数调用的最小时间
    //依然是猜测:d
      

  8.   

    我发了个邮件问了一位MSDN的专家,但是至今没有回复。
    ——可能自己英文太差,他没看懂我说的意思?(@#$@!&^&RW@#1!41@^*^(&)%^$)
      

  9.   

    我认为是优先级别问题的,setInterval也是按照就近一置的原则解决的这个问题.
    每回都是找完成操作的寄存器操控制的.间隔时间最短的操作,优先级别越高.
    例如第一种情况,程序顺序执行,所以会出现1 2 3 3 2 1 的情况.例如一下问题,第一回顺序执行,for循环,第一回起到耽误时间作用,以后没
    有在执行过,这个for循环拖延的时间,超过了1000,在职行的过程中,寄存器
    已经都把setInterval("producer(2)",1000);与setInterval("producer(1)",1000);
    放到进程队列中了,等待空闲马上执行,所以就出现和上一程序不一样的操作.
    出现 1 2 3 2 1 3
      

  10.   

    唉。_____________________________________________________________________________该问题已经结贴 ,得分记录:  zairwolfc (300)
      

  11.   

    其实setInterval("producer(3)",1000);
    和上面两个都无关了,他们虽然都是相隔1000,但是起点不同,所以不需要堆栈
    1,2因为触发的起点相近,间隔都是一样的,导致他们起点间隔的那段时间无法执行完1,所以先把2压入堆栈
      

  12.   

    估计这个帖子差不多就这样了。
    感觉 ttyp(愿赌服输) 说得这个原因还是比较合理的!
    手册上怎么不说?哼!如果真得需要间隔时间相同的多个setInterval(),把执行体或函数一起写进第一个参数,分号分隔吧!这样比较容易理解和“控制”。我就说这个问题没有什么使用价值,呵呵。谢谢大家参与!结贴了!
      

  13.   

    Estyle(靳田) 大虾竟然说俺地问题没有价值,实在是不给面子,拷打中……发了我登录10天的大洋,来这儿分点红,呵呵
      

  14.   

    恩啦,恩啦,BubbleInDiamond(以下想法纯属虚构),我也补偿你一点嘛!
    ——个人感觉这个问题的确理论价值比实用价值大太多,呵呵。不过我们还是有兴趣。
      

  15.   

    今天收到国外某强人的E-MAIL(询问这个问题的回复)。
    他的回答还真是明确:
    1、他不知道IE是如何实现setInterval()的,但不同的浏览器甚至不同的版本,实现方法可能改变(言外之意是这个问题没有实际意义)。
    2、不应该像这样使用setInterval(),完全是自找麻烦。
    ——虽然这样的回答让我不满意,不过我还是回信向他表示感谢了。外国人都那么实际?