转自: http://www.blogjava.net/emu/archive/2005/06/20/6365.html 1<html><head><title>emu -- 用fason的参数化定时器模拟多线程</title></head><body> 2 <SCRIPT LANGUAGE="JavaScript"> 3 <!-- 4 5 var _st = window.setTimeout; 6 window.setTimeout = function(fRef, mDelay) { 7 if(typeof fRef == 'function'){ 8 var argu = Array.prototype.slice.call(arguments,2); 9 var f = (function(){ fRef.apply(null, argu); }); 10 return _st(f, mDelay); 11 } 12 return _st(fRef,mDelay); 13} 14 15var _int = window.setInterval; 16window.setInterval = function(fRef, mDelay) { 17 if(typeof fRef == 'function'){ 18 var argu = Array.prototype.slice.call(arguments,2); 19 var f = (function(){ fRef.apply(null, argu); }); 20 return _int(f, mDelay); 21 } 22 return _st(fRef,mDelay); 23} 24 25 26function startNewTask(){ 27 var target = document.getElementById("sampleResult").cloneNode(true); 28 with (target){ 29 id="";style.display="block";style.color=(Math.floor(Math.random()* (1<<23)).toString(16)+"00000").substring(0,6); 30 } 31 document.body.insertBefore(target,document.body.lastChild); 32 var parameter = {target:target,n:0,result:0} 33 parameter.timer = setInterval(count,1,parameter); 34} 35 36function count(parameter){ 37 with (parameter){ 38 if (!target.stop){ 39 for(var i=0;i<speed;i++) 40 if (n<MAX) result += ++n; 41 target.innerHTML = result; 42 } 43 if (n>=MAX){ 44 clearInterval(timer); 45 setTimeout(function(elm){document.body.removeChild(elm)},2000,target); 46 } 47 } 48} 49 50var speed = 1111; 51var MAX=100000; 52//--> 53</SCRIPT> 54<button onclick="startNewTask()">开始新线程</button> 55 56<BR><BR> 57<div id=sampleResult onmouseover="this.stop=true" onmouseout="this.stop=false" style="display:none;cursor:hand">0</div> 58</body> 59</html>
|