浏览 665 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-24
以前我们解决这样的问题都是针对具体问题写一段代码来模拟多线程的,但是由于往往要对没个线程单独编码,这样的代码十分冗长(http://www.blogjava.net/Files/emu/counting.zip)。学习设计模式的时候就曾经考虑过在javascript中实用command模式来更好的模拟多线程,但是一直没有付诸实施,今天既然想起来了就试试看: <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 onclick="startNewTask()">start</button> <BR><BR> </body> </html> 注意第11行。javascript里面函数也是对象,所以就没有必要把函数调用包装到do或者execute方法里面了,直接用()就可以让函数对象运行起来: commandList.shift()(); shift函数是javascript中array对象的函数,可是IE5居然没有定义,不过我曾经实现过IE5上面没实现的全部array函数,可以用这个脚本来增强IE5: http://www.blogjava.net/Files/emu/IE5ArrayFunctions.zip 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |