zoukankan      html  css  js  c++  java
  • 读Ext之七(多任务定时管理)

    Ext.util.TaskRunner 用来管理多任务定时管理。每一个任务是一个JS对象,具有以下属性

    run, interval, args, scope, duration, repeat。

    示例如下:

    var task = {
    	run : function(){...},
    	interval : 1000,
    	args : [],
    	scope : obj,
    	duration : 5000,
    	repeat : 3
    }
    

    run和interval是必选,其它为可选。

    鸟瞰类如下:

    Ext.util.TaskRunner = function(interval){
        interval = interval || 10;
        var tasks = [], 
        	removeQueue = [],
        	id = 0,
        	running = false,
    
    		...
    	    
        	// private
        	runTasks = function(){
    			...
    	    };
    
        this.start = function(task){
        	...
        };
    
        this.stop = function(task){
    		...
        };
    
        this.stopAll = function(){
    		...
        };
    };
    Ext.TaskMgr = new Ext.util.TaskRunner();
    

    Ext.util.TaskRunner 为一个类,需要new后使用。定义方式同Ext.util.DelayedTask ,采用构造函数方式 。

    向外提供了三个接口方法,start,stop,stopAll。另外一堆私有函数协助构造整个类,其中最重要的为runTasks,this.start中调用其。

    最后一句可以看到给顶级的命名空间Ext上挂了个TaskMgr,Ext库自身使用使用 Ext.TaskMgr 进行多任务定时管理。

    下面先列出该类的使用

    示例1

    // 创建一个任务管理对象
    var taskMgr = new Ext.util.TaskRunner();
    // 创建一个任务
    var task1 = {
    	run : function(){
    		console.log('test');
    	},
    	interval : 1000
    };	
    // 开始执行任务task1
    taskMgr.start(task1);
    

    从控制台可以看到每隔一秒输出了一次test。run为function类型,即表示一个任务。interval为Number类型,表示任务执行间隔的时间。

    示例2

    // 创建一个任务管理对象
    var taskMgr = new Ext.util.TaskRunner();
    // 创建一个任务
    var task1 = {
    	run : function(){
    		console.log(arguments);
    		console.log(this);
    	},
    	interval : 1000,
    	args : [1,2],
    	scope : window
    };	
    // 开始执行任务task1
    taskMgr.start(task1);
    

    从控制台可以看到每隔一秒输出了"[1,2]","window"。即args(Array类型)为run调用时的参数,scope(Object类型)为run执行时的上下文。

    示例3

    // 创建一个任务管理对象
    var taskMgr = new Ext.util.TaskRunner();
    // 创建一个任务
    var task1 = {
    	run : function(){
    		console.log('test');
    	},
    	interval : 1000,
    	duration : 5000
    };	
    // 开始执行任务task1
    taskMgr.start(task1);
    

    从控制台可以看到仍然是每隔一秒输出一次"test",但5秒后就停止了。即duration(整数,单位为毫秒)为任务run持续执行的时间,超过该时间不再执行。注意,duration设置为4900也会执行5次。

    示例4

    // 创建一个任务管理对象
    var taskMgr = new Ext.util.TaskRunner();
    // 创建一个任务
    var task1 = {
    	run : function(){
    		console.log('test');
    	},
    	interval : 1000,
    	repeat : 3
    };	
    // 开始执行任务task1
    taskMgr.start(task1); 
    

    从控制台可以看到仍然是每隔一秒输出一次"test",但输出3次后就停止了。即repeat(Number类型)为任务run执行的次数,超过该次数不再执行。注意,repeat不能为小数(如3.3),否则将会一直执行而不是执行3次。



    以上示例了解到了任务对象的各个属性意义。但仅仅是一个任务,

    // 创建一个任务管理对象
    var taskMgr = new Ext.util.TaskRunner();
    // 创建一个任务
    var task1 = {
    	run : function(){
    		console.log('test1');
    	},
    	interval : 1000,
    };
    var task2 = {
    	run : function(){
    		console.log('test2');
    	},
    	interval : 3000,
    };	
    // 开始执行任务
    taskMgr.start(task1);
    taskMgr.start(task2);
    

    从控制台可以看到仍然第一秒输出"test1","test2",第二秒时只输出test1,第三秒又输出"test1","test2"。即有两个任务在执行。


    明白了start方法,stop和stopAll方法就很好理解了。无须复述。

     

    TaskMgr.js

  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/snandy/p/2474172.html
Copyright © 2011-2022 走看看