假设我用setTimeout函数设置了一个线程A,A线程运行时继续创建A1、A2、...线程(线程设置好的不会过多),他们隔一段时间访问tableA元素。    此时人为触发event事件,event事件的目标就是:
目标1、删除该tableA;
目标2、停止一切A(A1、A2...)线程;
目标3:增加tableB元素;
目标4:启动线程B。
    B将仿照A线程继续循环;不能刷新页面。请问有没有行内人士给个目标1和2的解决方案(直接删除tableA是可能线程Ax正在访问它)
    相信csdn高手如云这个小问题应该不在话下的吧!

解决方案 »

  1.   

    event事件的目标: 
    目标1、目标2、目标3:目标4:是什么东西?是HTML元素吗?
      

  2.   

    据我所知, 主流浏览器中Javascript 并不是真的支持多线程,"直接删除tableA是可能线程Ax正在访问它"情况不可能出现的.
     
      

  3.   

    据我所知, 主流浏览器中Javascript 并不是真的支持多线程,"直接删除tableA是可能线程Ax正在访问它"情况不可能出现的. 所以只要在一个程序块中完成:
    目标1、删除该tableA;
    目标2、停止一切A(A1、A2...)线程;
    目标3:增加tableB元素;
    目标4:启动线程B。 就不会出现你担心的问题.
      

  4.   

    设置全局js变量
    var a1runflag = true;//是否允许执行
    var a2runflag = true;//是否允许执行
    var brunflag = false;//是否允许执行
    var arunflag = true;//是否允许执行event 
    js中:
    删除tablea
    a1runflag = false;a2runflag = false;brunflag = true;在a1,a2,b等模拟线程的函数中,检查运行标志:
    function aruntest () {
    if (arunflag ) {
    运行a线程
    } else {
    setTimeout(aruntest ,10000);
    }
    }
      

  5.   

    js引擎其实是单线程的,多个timeout执行还是在同一个线程内执行的,不会出现你说的情况
      

  6.   

    做了一个, 不知道是不是这样的.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>模拟多线程</title>
    <script type="text/javascript">
    var TP = [];
    function $(id){
    return document.getElementById(id);
    }
    function debug(msg){
    $("msg").innerHTML += msg + "<br/>";
    $("msg").scrollTop += 50;
    }
    function ThreadA(){
    TP = [];
    TP.push(setTimeout(A1, 400));
    TP.push(setTimeout(A2, 800));
    TP.push(setTimeout(arguments.callee, 1000));
    }
    function A1(){
    debug(new Date().toLocaleTimeString() + " 1: " + $("tableA").getElementsByTagName("input")[0].value );
    }
    function A2(){
    debug(new Date().toLocaleTimeString() + " 2: " + $("tableA").getElementsByTagName("input")[0].value );
    }
    function ThreadB(){
    debug(new Date().toLocaleTimeString() + " TB : " + $("tableB").getElementsByTagName("input")[0].value );
    }
    function doEvent(){
    //中止A线程
    for(var i = 0; i < TP.length; i++){
    clearTimeout(TP[i]);
    }
    TP = [];

    //删除tableA, 创建tableB
    var html = $("tableA").parentNode.innerHTML.replace(/tableA/g, "tableB");
    $("tableA").parentNode.innerHTML = html;
    $("tableB").getElementsByTagName("input")[0].value = "";

    //启动线程B
    setTimeout(ThreadB, 1000);
    }
    window.onload = function(){
    TP.push(setTimeout(ThreadA, 1000));
    };
    </script>
    </head>
    <body>
    <table border="0">
    <tr><td width="50%" valign="top">
    <div id="tableA">tableA:<input  /></div>
    </td><td>
    <input type="button" value="触发事件" onclick="doEvent()" />
        <div id="msg" style="width:300px; height:300px; overflow:auto"></div>
    </td></tr>
    </body>
    </html>