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">
</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>