以前看过一个帖子,是那个人用setTimeout模拟的,js本身没有真正的多线程。

解决方案 »

  1.   

    如楼上所说。
    可以使用以下两个脚本来测试:setTimeout(function(){alert(1);},1);
    alert(2);
    显示次序为2,1alert(1);
    alert(2);
    显示次序为1,2第一个脚本显示次序为2,1说明setTimeout是不用等执行完,就可以执行下一句的(形式上跟多线程一样),但是同时,2和1没有同时出现,说明并不存在真正的多线程。
      

  2.   

    要看js引擎的宿主在哪里,如果是在ie下可以用setTimeout起一个Timer线程,类似如果是在WSH下可用WScript.Sleep.
    Windows平台下,可借助COM组件实现多线程,并在每个Thread里跑代码。
      

  3.   

    我遇到过一个问题,不知道算不算是多线程
      下面是我的代码:
              function raiseDiv(){
    if(!area){
    return ;
    }
    var divTop = parseInt(area.offsetTop);
    area.style.top = divTop - 10 + "px";
    if(divTop <= 40){
    area.style.top = divTop + "px";
    //area.removeChild(area.lastChild);
    area.style.display = "none";
    setTimeout(fallDiv,500);
    return ;
    }
    setTimeout(raiseDiv,2);
    }

    function fallDiv(){
    if(!area){
    return ;
    }
    childArea.style.display = "block";
    area.style.display = "block";
    area.appendChild(childArea);

    var divTop = parseInt(area.offsetTop);

    area.style.top = divTop + 10  + "px";
    if(divTop >= 280){
    area.style.top = divTop + "px";
    return ;
    }
    setTimeout(fallDiv,10);
    }
    我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。
           我也不知道这算不算是多线程,请指教……
      

  4.   

    我遇到过一个问题,不知道算不算是多线程
      下面是我的代码:
              function raiseDiv(){
    if(!area){
    return ;
    }
    var divTop = parseInt(area.offsetTop);
    area.style.top = divTop - 10 + "px";
    if(divTop <= 40){
    area.style.top = divTop + "px";
    //area.removeChild(area.lastChild);
    area.style.display = "none";
    setTimeout(fallDiv,500);
    return ;
    }
    setTimeout(raiseDiv,2);
    }

    function fallDiv(){
    if(!area){
    return ;
    }
    childArea.style.display = "block";
    area.style.display = "block";
    area.appendChild(childArea);

    var divTop = parseInt(area.offsetTop);

    area.style.top = divTop + 10  + "px";
    if(divTop >= 280){
    area.style.top = divTop + "px";
    return ;
    }
    setTimeout(fallDiv,10);
    }
    我想实现的效果就是通过一个按钮,点击后先让DIV上去,再下来一个。如果反复的点的话好象就在我设置的时间内又执行了一个方法。
           我也不知道这算不算是多线程,请指教……
      

  5.   

    http://topic.csdn.net/u/20081102/15/a0c3d335-0473-42c0-868d-6bc948fb5de5.html
      

  6.   

    以前见过一个javascript的多线程库,他把用户定义的function重新解析,分成N个原子function,然后有一个线程容器来调度。这基本上算是真正意义的多线程了。
    使用timeout之类的说是多线程的先去看看线程应该具备的特性吧。
      

  7.   

     请教 :那用timeout来实现的时候,有时候在timeout等待时间内又开始了同一个timeout是怎么一回事啊? 谢谢……
      

  8.   


    这么说吧,从根本上来讲,在JavaScript中,除了window.alert/prompt之类这种本地代码实现的方法之外,不存在中断,并且函数是不可再分的,没有机制将它分解成时间片。这也就是为什么不存在多线程的本质。
    你写一个function(){...}是不可能在这个函数执行到一半的时候终止它的,无论用任何方式(除了用alert之类)。
    如果你这样写:
    vat t1 = window.setTimout(function(){},1)
    var t2 = window.setTimout(function(){},2)
    其本质也是在1毫秒之后调用t1的方法,然后执行它,然后2毫秒之后执行t2。但是如果t1这里还没执行完(比如一个死循环),则t2就不会执行的。所以本质上来说,不存在两个同时执行的过程。
    除非你将一个function写成n个原子function,然后手工调度他们。这就是我说的那个线程库的基本原理。
    不过建议你还是考虑一下为什么要在js中使用多线程以及他的必要性。