TaskScheduler的分析_2

前面说到了 在 TaskScheduler中可能包含3个链表。

然后我们继续看TaskScheduler的子类 BasicTaskScheduler就可以到里面有一个这个成员变量:

DelayQueue    

fDelayQueue

 

fDelayQueue就是我们前面说的其中一个链表,这个链表是跟DelayedTask相关的。

然后我们来继续看DelayQueue这个链表类,它的节点是DelayQueueEntry。这是一个双向、循环列表,所以每个节点必须包含其前后节点的指针。

在源码里面DelayQueueEntry的结构是这样的:

private:

friend class DelayQueue;

DelayQueueEntry* fNext;

DelayQueueEntry* fPrev;

DelayInterval         fDeltaTimeRemaining;

long                       fToken;

staitc long              tokenCounter;

public:

virtual void handleTimeOut();

这个节点里面内容有2个:

fDeltaTimeRemaining,这是一个跟时间相关的类,在这里我们完全可以把它当成一个long型数据。

fToken,则可以看作是一个标识码,不同的DelayQueueEntry对应不同的数字,它是通过tokenCounter对它赋值的。

然后里面有个函数 handleTimeOut这个函数代表如果 时间到了(fDeltaTimeRemaining==0)或者超时了要进行什么操作,这个操作是由它的子类来完成的。

然后我们再回来看DelayQueue这个链表,它包含一个表头,表头的前后指针都指向自己,fDeltaTimeRemaining为无限大。fToken应该为1.

链表有些操作,不外乎是 添加和删除节点,然后是更新节点。

所以前面说的3个函数:

scheduleDelayedTask

unscheduleDelayedTask

rescheduleDelayedTask

就是添加和删除链表的节点了,淡然这里面节点不是基类DelayQueueEntry而是它的子类: AlarmHandler,这个类主要重写了handleTimeOut这个函数,在这个函数里面表明如果超时了 就执行一个对应的函数,函数以及函数的参数由scheduleDelayedTask的参数给出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值