• 读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

  • 相关阅读:
    针对小程序for循环绑定数据,实现toggle切换效果(交流QQ群:604788754)
    小程序中bindtap绑定函数,函数参数event对数据的处理
    小程序中data数据的处理方法总结(小程序交流群:604788754)
    Power OFF and ON USB device in linux (ubuntu)
    linux控制USB的绑定/解绑
    卡内操作系统COS
    Linux内核:sk_buff解析
    skb_store_bits() 和 skb_copy_bits()
    skb详细解析【转】
    TCP:WireShark分析,序列号Seq和确认号Ack
  • 原文地址:https://www.cnblogs.com/snandy/p/2474172.html
Copyright © 2020-2023  润新知