zoukankan      html  css  js  c++  java
  • ExtJS实用工具类 Ext.util.TaskRunner

    TaskRunner 在浏览器提供的 setTimout()/setInterval() 基础上继续完善, 扩展了主要两项功能:执行次数的限制、执行时间的限制(即超时)。TaskRunner 旨在利用计时器分时执行方法提供一个相对简易的并行运行机制,其目的不但在于一般的延时执行任务(或者另一个类 DelayedTask 会更合适),还可以同时进行多项任务。这样的话,任意个独立的任务都可以在任何时候开始,并彼此独立地运行。那么是否与多线程的概念有些相近呢?其实不尽然——这里必须说明一下,尽管 ExtJS 官方文档提出“提供以多线程的方式执行一个或多个任务的能力 Provides the ability to execute one or more arbitrary tasks in a multithreaded manner……”的概念,但并不是真正的代替“线程(thread)”,仅仅是“模拟”。因为我们晓得,浏览器接口也好,JS运行时也好,仍不出“单线程模型”的范围内,所以我们认为充其量只是模拟线程的一种手段。在内部结构中,由数组 tasks[] 保持着任务对象的队列。每个任务对象详细的接口如下:

    • run : Function 任务每次运行时执行的函数。该函数将在每次间隔后被调用并传入 args 参数,如果该项被指定了的话。 如果需要特定的作用域,请保证设置了scope 参数。
    • interval : Number 以毫秒为单位表示的任务执行的间隔。
    • args : Array (可选项) 一个由传递给 run 所指定的函数的参数组成的数组。若不指定则为当前的步进值,即源码中的taskRunCount。 
    • scope : Object (可选项) run 指定的函数的作用域。默认为当然任务对象。
    • duration : Number  (可选项) 任务在自动停止前的执行时长(默认为无限制)。 
    • repeat : Number (可选项) 任务在自动停止前的执行次数(默认为无数次)。

    在 TaskRunner 调用方式上,允许开发者以一般“实例化”对象的调用,这点与 setTimout()/setInterval() 的语法截然不同。

     

    [javascript] view plaincopy
    1. // 开始一个简单的每秒更新 DIV 的定时任务  
    2. var updateClock = function(){  
    3.     Ext.fly('clock').update(new Date().format('g:i:s A'));  
    4. }   
    5. var task = {  
    6.     run: updateClock,  
    7.     interval: 1000 //1 second  
    8. }  
    9. var runner = new Ext.util.TaskRunner();  
    10. runner.start(task);  

    你不但可以实例化 TaskRunner 来制定一个任务,还可以透过调用单例方法 Ext.TaskMgr() 完成,作用无异,例如:

     

    [javascript] view plaincopy
    1. // 开始一个简单的每秒更新 DIV 的定时任务  
    2. var task = {  
    3.     run: function(){  
    4.         Ext.fly('clock').update(new Date().format('g:i:s A'));  
    5.     },  
    6.     interval: 1000 //1 秒  
    7. }  
    8. Ext.TaskMgr.start(task);  

    欲并行执行多个任务(或说方法)可以设置 interval 配置项非常短的时间,比如10ms。另外注意,如果run 函数返回了 false 值,则该任务中止,撤销计时器(不能恢复)。stop()是撤销队列中指定任务的方法(不能恢复),stopAll()是停止所有任务的方法

    每次初始化 Task 时都会自动记录当前时间的量 taskStartTime,并保存在任务对象身上。执行任务之后,如果超出允许的运行时间范围则中止任务(参见:t.duration && t.duration <= (now - t.taskStartTime))。运行次数的限制亦如法炮制。

    TaskRunner 在 Ext JS 1.x ~4.x中通过,注意单例 Ext.TaskMgr 的命名空间在 ExtJS 4中稍有不同,为 Ext.TaskManager。   

  • 相关阅读:
    IOS开发--第四阶段--关联
    1.7 Flask
    1.4 linux 路飞项目
    linux 1.3 nginx 负载均衡和配置文件
    1.2 redis
    1.1 xinnian
    12.30 linux 7
    12.29
    12.29 linux3 mysql和redis
    12.28 linux 第四天 安装python 和虚拟环境
  • 原文地址:https://www.cnblogs.com/jackydalong/p/2478875.html
Copyright © 2011-2022 走看看