◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
JScript 能创建多线程吗?比如主线被alert(打断)我能不能 用他的子线程 进行一些计算,
比如AJAX 一些图片 过来。
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

解决方案 »

  1.   

    听说下面的代码用到 多线程:
      我看了那久 还是不得其解
    谁能帮我读读其义,(代码不是我写的)
    <html>
    <head>
    <title>ajax</title>
    <script type="text/javascript" src="JS/jquery-1.4.2.js"></script>
    <script src="JS/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">
    //定义一过程
    //var addCount = new Function("tagThread.innerHTML = tagThread.innerHTML * 1 + 1");
    //var addCount = new Function("alert();");
    //可实现多个线程,见下。
    var addCount1 = function() { tagThread1.innerHTML = tagThread1.innerHTML * 1 + 1 };
    var addCount2 = function() { tagThread2.innerHTML = tagThread2.innerHTML * 1 - 1 };
    //生成线程类
    var thrd = new Thread(1000);
    thrd.Start(addCount1); //开始一线程
    thrd.Start(addCount2); //又开始一线程 //以下是类定义部分:
    function Thread(Timer) {
    var thArr = [];  //相当于 var thArr = new Array();
    this.toString = function() { return "测试线程实例。" }; //类字符串化,方法重写,很受启发。
    this.Timer = Timer || 1000; //如果Timer有初值, 否则Timer为1000 ,JS语言的特殊性,易读性不好,不好。
    //加入生成一个滚动元素marquee
    this.Tag = self.document.createElement("marquee");
    this.Tag.appendChild(self.document.createTextNode("-"));
    this.Tag.scrollDelay = this.Timer;
    //将滚动元素marquee加入div中
    var _div = document.createElement("div");
    _div.style.height = 1;
    //_div.style.overflow = "hidden";
    _div.appendChild(this.Tag);
    //滚动事件
    this.Tag.onscroll = function() {
    for (var i = 0; i < thArr.length; i++)
    thArr[i](); //执行多个事件函数???第一次知道!以前只知道C#是可以这样的。
    }
    //将div加入document中
    new function main() //类初试化
    {
    if (self.document.readyState != "complete") //如果文档未完成
    return setTimeout(main);    //继续调用 
    self.document.body.appendChild(_div);    //直到文档调用完成后,加入_div(带滚动条的)
    }
    this.Start = function(thread) {
    thArr.push(thread); //函数元素入栈
    }
    }
    </script>
    </head>
    <body>
    执行次数:<span id="tagThread1">0</span>
    <br/>
    <span id="tagThread2">100</span>
    <br/>
    <input type="button" value="弹出框" onclick="alert(thrd)"/>
    </body>
    </html>
      

  2.   

    下面这个几个代码
    this.Tag.onscroll = function() {
        for (var i = 0; i < thArr.length; i++)
            thArr[i](); 
    }
    //将div加入document中
    new function main() //类初试化
    {
        if (self.document.readyState != "complete") //如果文档未完成
            return setTimeout(main);    //继续调用 
        self.document.body.appendChild(_div);    //直到文档调用完成后,加入_div(带滚动条的)
    }
    this.Tag.onscroll
    new function main()
    self.document.readyState
      

  3.   

    你在那个代码里加个alert试试就出来效果了 alert必然会打断线程
      

  4.   

    是啊,一点al就打断了,
    但是:
    1,上面有几个代码看不明的,  请求解释一下,谢谢。2,另外问下,浏览器不对 JS 开放多线程?
      

  5.   

    不知 浏览器有没有给js 授权?
         象alert()
    confirm("真的要执行吗? ");
    prompt("输入一个5-100之间的数字<br/>")
    等等这些。
    可能要重写了。
      

  6.   

    JS本来就是单线程的东西,再怎么写最多就是分时的伪多线程,但是alert必定会打断
    据说html5有多线程worker模块,但没仔细研究过
      

  7.   

    请问:
    为什么 下面的重写失败?
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
    <script src="JS/jquery-1.4.2.js" type="text/javascript"></script>
    <script src="JS/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">
    window.alert = function(data){
        $("#walert").html(data.toString());//这里好象不支持JQ方法啊?不知为什么。
    };
    alert("123");
    </script>
    </head>
    <body>
    <div id="walert"></div>
    </body>
    </html>
    //这里好象不支持JQ方法啊?不知为什么。
      

  8.   

    js本来就是单线程语言,代码再怎么写最多也只是伪多线程而已。
    IE不允许重写alert,firefox没问题