javascript 实现sleep效果

1.

   function   sleep(n)  
      {  
          var   start=new   Date().getTime();  
          while(true)   if(new   Date().getTime()-start>n)   break;  
      }  

2.

 <script   language="javascript">  
          var   flag=""  
          function   sleepI(n)  
          {  
                flag   =   window.setInterval("c()",1000*n);    
          }  
           
          function   c(){alert("s11");window.clearInterval(flag);}  
   
          function   test()  
          {  
  sleepI(3);  
  alert("s22");  
          }  
  </script>  
   
   
  <body>  
  <button   onClick="test();"   name="btn"   value="BUTTON"></button>  
  </body>   

3.

<html>  
  <head>  
  <title>emu   --   用command模式模拟多线程</title>  
  </head>  
  <body>  
  <SCRIPT   LANGUAGE="JavaScript">  
  <!--  
  var   commandList   =   [];  
  function   executeCommands(){  
  if   (commandList.length>0){  
  commandList.shift()();  
   
  }  
  }  
   
  function   startNewTask(){  
  var   resultTemp   =   document.createElement("span");  
  document.body.insertBefore(resultTemp,document.body.lastChild);  
  document.body.insertBefore(document.createElement("br"),document.body.lastChild);  
  resultTemp.innerText   =   0;  
          commandList.push(function(){simThread(resultTemp,0);});  
  }  
   
  function     simThread(temp,n){  
  temp.innerText   =   temp.innerText-(-n);  
  if   (n<1000)  
  commandList.push(function(){simThread(temp,++n);});  
  else{  
  document.body.removeChild(temp.nextSibling);  
  document.body.removeChild(temp);  
  }  
  }  
   
  window.onload   =   function(){setInterval("executeCommands()",1);}  
   
  //-->  
  </SCRIPT>  
  <button   οnclick="startNewTask()">start</button>  
   
  <BR><BR>  
  </body>  
  </html>   
4.

 package   net.sf.pies.test;  
   
  import   java.io.IOException;  
  import   java.io.PrintWriter;  
   
  import   javax.servlet.ServletException;  
  import   javax.servlet.http.HttpServletRequest;  
  import   javax.servlet.http.HttpServletResponse;  
   
  /**  
    *   Servlet   implementation   class   for   Servlet:   HttpStreamServlet  
    *  
    */  
    public   class   HttpStreamServlet   extends   javax.servlet.http.HttpServlet   implements   javax.servlet.Servlet   {  
          /**  
    *    
    */  
  private   static   final   long   serialVersionUID   =   1L;  
   
  /*   (non-Java-doc)  
    *   @see   javax.servlet.http.HttpServlet#HttpServlet()  
    */  
  public   HttpStreamServlet()   {  
  super();  
  }        
   
  /*   (non-Java-doc)  
    *   @see   javax.servlet.http.HttpServlet#doGet(HttpServletRequest   request,   HttpServletResponse   response)  
    */  
  protected   void   doGet(HttpServletRequest   request,   HttpServletResponse   response)   throws   ServletException,   IOException   {  
   
  PrintWriter   out   =   response.getWriter();  
  int   time   =   Integer.parseInt(request.getParameter("time"));  
   
  try   {  
  Thread.sleep(time);  
  out.println(time);  
  }   catch   (InterruptedException   e)   {  
  throw   new   ServletException(e);  
  }  
   
  }      
   
  /*   (non-Java-doc)  
    *   @see   javax.servlet.http.HttpServlet#doPost(HttpServletRequest   request,   HttpServletResponse   response)  
    */  
  protected   void   doPost(HttpServletRequest   request,   HttpServletResponse   response)   throws   ServletException,   IOException   {  
  //   TODO   Auto-generated   method   stub  
  }                    
  }  
   
   
  以上,如果以   sleep?time=2000   调用(假设该servlet被mapping到/sleep上),则会等待2秒后输出2000。  
   
  这个方法适用于所有具有同步调用的环境,不过缺点是,时间不太准确,因为要访问server,虽然可以进一步引入时间同步代码,但总不适于要求等待时间较短的情况。唉,如果xmlhttprequest能设timeout就好了。

6.、

 

<html>  
   
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>JK:支持民族工业,尽量少买X货</title>  
   
  <script   language=javascript>  
   
  function   sleep(num)   //JK  
  {  
  var   tempDate=new   Date();  
  var   theXmlHttp   =   new   ActiveXObject(   "Microsoft.XMLHTTP"   );  
  while((new   Date()-tempDate)<num   )  
  {  
  try{  

//把url改成about:blank,可以提高sleep的毫秒的精度。  
  theXmlHttp   .open(   "get",   "http://www.google.com/JK.asp?JK="+Math.random(),   false   );  
  theXmlHttp   .send();  
  }  
  catch(e){;}  
  }  

 

7.

js本身是没办法办到的,借助其他也许可能做成真正的sleep  
   
  ServerXMLHTTP有个setTimeouts方法  
   
  var   xmlServerHttp   =   new   ActiveXObject("Msxml2.ServerXMLHTTP.4.0");  
  var   lResolve   =   5   *   1000;  
  var   lConnect   =   5   *   1000;  
  var   lSend   =   15   *   1000;  
  var   lReceive   =   15   *   1000;  
  xmlServerHttp.setTimeouts(lResolve,   lConnect,   lSend,   lReceive);  
  xmlServerHttp.open("GET",   "http://localhost/sample.xml",   false);  
  xmlServerHttp.send();

 

8.

to   JK  
          setTimeout是立即返回,是不能完全实现sleep那种,只是模拟,有点象。执行的时候不是有个延迟吗?动态的把延迟加大,也就是说每次执行的延迟时间不同。这样如果是在循环执行过程中的,就可以达到sleep的这个效果,比如  
            <html>  
   
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>WaterFire</title>  
  </head>  
  <script   language=javascript>  
                  num=1;  
  var   _st   =   window.setTimeout;  
  window.setTimeout   =   function(fRef,mDelay)  
  {  
  if   (typeof   fRef=="function")  
  {  
  if(arguments.length>2)  
  {  
  mDelay=parseInt(arguments[2])*parseInt(1000)+parseInt(mDelay);  
  return   _st(fRef,mDelay)  
  }  
  }  
  return   _st(fRef,mDelay);  
  }  
  function   writeNum()  
  {  
  if(num==5)//执行第5次的时候调用sleep方法,延迟5秒执行  
  {  
  document.getElementById("div1").innerText=num+"这次延迟";  
  sleep(5);  
  }  
  else  
  {  
  document.getElementById("div1").innerText=num;  
  num=parseInt(num)+parseInt(1);  
  window.setTimeout("writeNum()",1000);  
  }  
   
  }  
  function   sleep(timeNum)  
  {  
  window.setTimeout(writeNum,1000,timeNum);  
  num=num+parseInt(1);  
  }  
  </script>  
  <body   οnlοad=writeNum()>  
  <div   id="div1">  
  &nbsp;  
  </div>  
  </body>  
  </html>  


  return;  
  }  
  </script>  
  </head>  
   
  <body>  
  js不耗(耗得比较少)cpu的  
  sleep(ms):<input   value=10000   name=aaa   >   ,<input   type=button   value="alert(0);sleep(..);alert(1);"   οnclick="alert(0);sleep(document.all.aaa.value);alert(1);">    
  </body>  
   
  </html>   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值