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 相关文章推荐
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
再论Javascript的类继承
Mar 05 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
Jul 05 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
js获取json元素数量的方法
Jan 27 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
javascript实现用户点击数量统计
Dec 25 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
Vue2.X 通过AJAX动态更新数据
Jul 17 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
解决vuecli3中img src 的引入问题
Aug 04 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许愿墙模块功能分析
2013/06/25 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
Javascript Global对象
2009/08/13 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python 调用钉钉机器人的方法
2019/02/20 Python
pandas数据处理进阶详解
2019/10/11 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
什么是网络协议
2016/04/07 面试题
结构工程研究生求职信
2013/10/13 职场文书
伊索寓言教学反思
2014/05/01 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
升学宴答谢词
2015/01/05 职场文书
大学生团日活动总结
2015/05/06 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python