94 lines
No EOL
2.3 KiB
JavaScript
94 lines
No EOL
2.3 KiB
JavaScript
/*
|
|
* Ext JS Library 1.0.1
|
|
* Copyright(c) 2006-2007, Ext JS, LLC.
|
|
* licensing@extjs.com
|
|
*
|
|
* http://www.extjs.com/license
|
|
*/
|
|
|
|
Ext.util.TaskRunner = function(interval){
|
|
interval = interval || 10;
|
|
var tasks = [], removeQueue = [];
|
|
var id = 0;
|
|
var running = false;
|
|
|
|
var stopThread = function(){
|
|
running = false;
|
|
clearInterval(id);
|
|
id = 0;
|
|
};
|
|
|
|
var startThread = function(){
|
|
if(!running){
|
|
running = true;
|
|
id = setInterval(runTasks, interval);
|
|
}
|
|
};
|
|
|
|
var removeTask = function(task){
|
|
removeQueue.push(task);
|
|
if(task.onStop){
|
|
task.onStop();
|
|
}
|
|
};
|
|
|
|
var runTasks = function(){
|
|
if(removeQueue.length > 0){
|
|
for(var i = 0, len = removeQueue.length; i < len; i++){
|
|
tasks.remove(removeQueue[i]);
|
|
}
|
|
removeQueue = [];
|
|
if(tasks.length < 1){
|
|
stopThread();
|
|
return;
|
|
}
|
|
}
|
|
var now = new Date().getTime();
|
|
for(var i = 0, len = tasks.length; i < len; ++i){
|
|
var t = tasks[i];
|
|
var itime = now - t.taskRunTime;
|
|
if(t.interval <= itime){
|
|
var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
|
|
t.taskRunTime = now;
|
|
if(rt === false || t.taskRunCount === t.repeat){
|
|
removeTask(t);
|
|
return;
|
|
}
|
|
}
|
|
if(t.duration && t.duration <= (now - t.taskStartTime)){
|
|
removeTask(t);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Queues a new task.
|
|
* @param {Object} task
|
|
*/
|
|
this.start = function(task){
|
|
tasks.push(task);
|
|
task.taskStartTime = new Date().getTime();
|
|
task.taskRunTime = 0;
|
|
task.taskRunCount = 0;
|
|
startThread();
|
|
return task;
|
|
};
|
|
|
|
this.stop = function(task){
|
|
removeTask(task);
|
|
return task;
|
|
};
|
|
|
|
this.stopAll = function(){
|
|
stopThread();
|
|
for(var i = 0, len = tasks.length; i < len; i++){
|
|
if(tasks[i].onStop){
|
|
tasks[i].onStop();
|
|
}
|
|
}
|
|
tasks = [];
|
|
removeQueue = [];
|
|
};
|
|
};
|
|
|
|
Ext.TaskMgr = new Ext.util.TaskRunner(); |