用过 VB 的朋友也许写过下面的代码
    While Tue
        ' Do something here
        DoEvents
    Wend这样的话,即使在这样的无限循环中,相应其他操作。不会将cpu死死的占住。再js中,有类似这样的功能吗?

解决方案 »

  1.   

    放在循环中间也不行,似乎cpu根本"来不及"去处理出了该循环外的其他代码!所以就需要像 DoEvents 这样的函数史改循环暂时中断,让cpu腾出时间去执行其他程序
      

  2.   

    <script language=javascript>
    for(i=0;i<5;i++) {
     alert("baisun"); 
    }</script>
    为何不可?
      

  3.   

    用js可能不行吧
    用java的线程可以试试吧
      

  4.   

    <div style="visibility:hidden" id="msg">正在执行中,请稍候……</div><script language=javascript>
    function action1{ //要花很长时间执行的动作document.msg.style.visibility="visible";  //显示让用户等候的信息真正要执行的任务
    ……………………
    //document.innerText="改变提示内容"  //这里可以改变提示的内容
    ……………………document.msg.style.visibility="hidden";  //显示让用户等候的信息}
    </script>
    <button onclick="action1()">
      

  5.   

    我想michael_monkey(从头再来)根本没有明白我的意思,也可能没认真想过我的问题吧!试看下面的代码:
    <DIV ID="divPrompt">
    <INPUT TYPE="BUTTON" onclick=fnTest() value="test">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function fnTest(){
        var oTab = null;
        oTab = document.createElement("TABLE");
        document.body.insertBefore(oTab);
        divPrompt.innerHTML = "Loading data now ... ";
        for(var i = 0; i < 500; i++){
            oTab.insertRow().insertCell().innerHTML = "Current value of variable i is " + i;
        }
    }
    //-->
    </SCRIPT>按照正常的运行逻辑,在点击按钮“Test”后,屏幕应该马上出现Loading data now ...的提示,没错吧,但是,就是因为下面有一个长时间的循环语句,所以在运行的时候,屏幕不会立即出现相应的提示,而是等循环运行完毕之后才出来。这显然不是我所想要的结果。。
      

  6.   

    下面是我想到的一种方法,就是使用 window.setInterval("...", 0) 来模拟类似 DoEvents 功能 试着运行下面的代码,你就会看到相应的效果:
    <DIV ID="divPrompt"></div>
    <INPUT TYPE="BUTTON" ID="btnStartLoadData" onclick=fnStartLoadData() value="Load ...">
    <INPUT TYPE="button" onclick=fnCancel() value="cancel">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    // ****************************************************************************
    var _ExecTimerID = null;
    function _InterruptExec(i, N, strFnProcess, strFnEndProcess){
        if(i++ < N){
            _ExecTimerID = window.setInterval(
                "_InterruptExec(" + i 
                             + ", " + N 
                             + ", '" + strFnProcess + "'" 
                             + ", '" + strFnEndProcess + "'"
                             + ")"
                , 0);
            eval(strFnProcess)(i);
        }else{
            window.clearInterval(_ExecTimerID);
            eval(strFnEndProcess)();
        }
    }
    // ****************************************************************************
    var oTab = null;
    function fnStartLoadData(){
        divPrompt.innerHTML = "Loading data now ... ";
        LoadData();
    }function fnCancel(){
        window.clearInterval(_ExecTimerID);
        btnStartLoadData.disabled = false;
        divPrompt.innerHTML += " <b>Operation was be cancelled.</b>";
    }function LoadData(){
        if(oTab != null)
            oTab.removeNode(true);    oTab = document.createElement("TABLE");
        oTab.border = 1;
        document.body.insertBefore(oTab);
        
        btnStartLoadData.disabled = true;
        _InterruptExec(0, 400, "ProcessLoadData", "EndProcessLoadData");
    }function ProcessLoadData(i){
        divPrompt.innerHTML = "Load item " + i;
        oTab.insertRow().insertCell().innerHTML = "Current value of variable i is " + i;
    }function EndProcessLoadData(){
        divPrompt.innerHTML = "Loading data now ... Okay";
        btnStartLoadData.disabled = false;
    }
    //-->
    </SCRIPT>