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

系统 1448 0
原帖子发表在 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
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
15 var _int = window.setInterval;
16 window.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
26 function 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
36 function 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
50 var speed = 1111 ;
51 var 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(黄希彤)

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论