//>>built define("dojox/timing/ThreadPool",["./_base"],function(){ dojo.experimental("dojox.timing.ThreadPool"); var t=dojox.timing; t.threadStates={UNSTARTED:"unstarted",STOPPED:"stopped",PENDING:"pending",RUNNING:"running",SUSPENDED:"suspended",WAITING:"waiting",COMPLETE:"complete",ERROR:"error"}; t.threadPriorities={LOWEST:1,BELOWNORMAL:2,NORMAL:3,ABOVENORMAL:4,HIGHEST:5}; t.Thread=function(fn,_1){ var _2=this; this.state=t.threadStates.UNSTARTED; this.priority=_1||t.threadPriorities.NORMAL; this.lastError=null; this.func=fn; this.invoke=function(){ _2.state=t.threadStates.RUNNING; try{ fn(this); _2.state=t.threadStates.COMPLETE; } catch(e){ _2.lastError=e; _2.state=t.threadStates.ERROR; } }; }; t.ThreadPool=new (function(_3,_4){ var _5=this; var _6=_3; var _7=_6; var _8=_4; var _9=Math.floor((_8/2)/_6); var _a=[]; var _b=new Array(_6+1); var _c=new dojox.timing.Timer(); var _d=function(){ var _e=_b[0]={}; for(var i=0;i<_b.length;i++){ window.clearTimeout(_b[i]); var _f=_a.shift(); if(typeof (_f)=="undefined"){ break; } _e["thread-"+i]=_f; _b[i]=window.setTimeout(_f.invoke,(_9*i)); } _7=_6-(i-1); }; this.getMaxThreads=function(){ return _6; }; this.getAvailableThreads=function(){ return _7; }; this.getTickInterval=function(){ return _8; }; this.queueUserWorkItem=function(fn){ var _10=fn; if(_10 instanceof Function){ _10=new t.Thread(_10); } var idx=_a.length; for(var i=0;i<_a.length;i++){ if(_a[i].priority<_10.priority){ idx=i; break; } } if(idx<_a.length){ _a.splice(idx,0,_10); }else{ _a.push(_10); } return true; }; this.removeQueuedUserWorkItem=function(_11){ if(_11 instanceof Function){ var idx=-1; for(var i=0;i<_a.length;i++){ if(_a[i].func==_11){ idx=i; break; } } if(idx>-1){ _a.splice(idx,1); return true; } return false; } var idx=-1; for(var i=0;i<_a.length;i++){ if(_a[i]==_11){ idx=i; break; } } if(idx>-1){ _a.splice(idx,1); return true; } return false; }; this.start=function(){ _c.start(); }; this.stop=function(){ _c.stop(); }; this.abort=function(){ this.stop(); for(var i=1;i<_b.length;i++){ if(_b[i]){ window.clearTimeout(_b[i]); } } for(var _12 in _b[0]){ this.queueUserWorkItem(_12); } _b[0]={}; }; this.reset=function(){ this.abort(); _a=[]; }; this.sleep=function(_13){ _c.stop(); window.setTimeout(_c.start,_13); }; _c.onTick=_5.invoke; })(16,5000); return dojox.timing.ThreadPool; });