JS模拟多线程


Posted in Javascript onFebruary 07, 2007
var Thread = {
 runNum : 0,  //当前正式运行的线程数
 maxNum : 10, //最大同时执行的线程数 -1表示不限
 commandList : new Array(), 
 start : function(){
  //window.status = this.runNum; 
  if(this.maxNum != -1 && this.runNum >= this.maxNum){   
   return; 
  }
  if(this.commandList.length <= 0){  
   this.runNum = 0;
   return false; 
  }  
  this.runNum++;
  var _this =this;  
  var tFun = function(){
   if(!_this.commandList[0]) return;
   var command = _this.commandList[0].shift();   
   command.apply(_this,_this.commandList[0].concat(
    function(){  //alert(2)     
     if(_this.runNum > 0)_this.runNum--; 
     setTimeout(function(){_this.start.apply(_this)},1);     
    }));
   _this.commandList.shift(); 
  }
  setTimeout(tFun,1);  
  setTimeout(function(){_this.start.apply(_this)},10);
 }
}

<script src="prototype.js"></script>
<script type="text/javascript" defer="defer">
function test(obj,info,callback){ 
 callback = callback || new Function();
 new Ajax.Request('test.xml',{method:'get',
  onSuccess:function(o){

   $(obj).innerHTML += info + '完成<br>';
   callback('完成');
  },
  onFailure : function(o){
   $(obj).innerHTML += info + '失败<br>';
   callback('失败');
  },
  onComplete : function(o){
   document.body.scrollTop = 9999;
  }
 });
}

var Thread = {
 runNum : 0,  //当前正式运行的线程数
 maxNum : 5, //最大同时执行的线程数 -1表示不限
 commandList : new Array(), 
 start : function(){
  //window.status = this.runNum; 
  if(this.maxNum != -1 && this.runNum >= this.maxNum){   
   return; 
  }
  if(this.commandList.length <= 0){  
   this.runNum = 0;
   return false; 
  }  
  this.runNum++;
  var _this =this;  
  var tFun = function(){
   if(!_this.commandList[0]) return;
   var command = _this.commandList[0].shift();   
   command.apply(_this,_this.commandList[0].concat(
    function(){  //alert(2)     
     if(_this.runNum > 0)_this.runNum--; 
     setTimeout(function(){_this.start.apply(_this)},1);     
    }));
   _this.commandList.shift(); 
  }
  setTimeout(tFun,1);  
  setTimeout(function(){_this.start.apply(_this)},10);
 }
}

for(var i = 0; i < 100 ; i++){
 Thread.commandList.push(new Array(test,document.body,i+1));
};
Thread.start();
</script>
<body>
</body>

Javascript 相关文章推荐
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
JQuery each打印JS对象的方法
Nov 13 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
使用prototype.js进行异步操作
Feb 07 #Javascript
最新优化收藏到网摘代码(digg,diigo)
Feb 07 #Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 #Javascript
js滚动条多种样式,推荐
Feb 05 #Javascript
如何在标题栏显示框架内页面的标题
Feb 03 #Javascript
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
Feb 03 #Javascript
使用JS操作页面表格,元素的一些技巧
Feb 02 #Javascript
You might like
php创建sprite
2014/02/11 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
js闭包用法实例详解
2016/12/13 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
Python random模块常用方法
2014/11/03 Python
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
基于python实现文件加密功能
2020/01/06 Python
python把一个字符串切开的实例方法
2020/09/27 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
法学专业个人求职信
2013/09/26 职场文书
个人找工作的自我评价
2013/10/17 职场文书
业务代表的岗位职责
2013/11/16 职场文书
英语自荐信范文
2013/12/11 职场文书
总裁助理岗位职责
2014/02/17 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
值班管理制度范本
2015/08/06 职场文书
您对思维方式了解多少?
2019/12/09 职场文书