用fason的参数化定时器在javascript中模拟多线程

原帖子发表在 http://community.csdn.net/Expert/TopicView.asp?id=4069144  author:emu(黄希彤)

有csdn的朋友把 http://community.csdn.net/Expert/TopicView.asp?id=3191873 给翻了出来,这样在javascript中模拟多线程又有了更漂亮的做法了:

 1 < html >< head >< title > emu -- 用fason的参数化定时器模拟多线程 </ title ></ head >< body >
 2 < SCRIPT  LANGUAGE ="JavaScript" >
 3<!--
 4
 5var _st = window.setTimeout;
 6window.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 >


有的时候command模式也许不是最好的办法,比如我之前写的例子。写那个例子纯粹只是为了演示command确实可以用在javascript中,并不表示我们任何时候都应该优先考虑这样做。 至于command模式本身,我仍认为它是最简洁优美的模式之一,在我们用各种语言解决问题的时候都可以考虑使用它,而不止于j2se。 套一句名言:如果你的工具箱里面只有榔头这一样工具,那么每个问题在你的眼里看起来都象钉子 author:emu(黄希彤)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值