木铎源码剖析—Timer
Timer
成员变量
const TimerCallback callback_; //定时器到期执行的回调函数
Timestamp expiration_; //表示定时器的到期时间
const double interval_; //表示定时器的时间间隔
const bool repeat_; //表示定时器是否为重复定时器
const int64_t sequence_; //表示定时器的序列号 这个序列号通常是由静态成员变量s_numCreated_自动生成,用于唯一标识每个定时器的创建顺序
static AtomicInt64 s_numCreated_;
成员方法
Timer(TimerCallback cb, Timestamp when, double interval)
: callback_(std::move(cb)),
expiration_(when),
interval_(interval),
repeat_(interval > 0.0),
sequence_(s_numCreated_.incrementAndGet())
{ }
void run() const{
callback_();
}
Timestamp expiration() const { return expiration_; }
bool repeat() const { return repeat_; }
int64_t sequence() const { return sequence_; }
void restart(Timestamp now);
static int64_t numCreated() { return s_numCreated_.get(); }
void Timer::restart(Timestamp now)
{
if (repeat_)
{
expiration_ = addTime(now, interval_);
}
else
{
expiration_ = Timestamp::invalid();
}
}
为了更好的取消定时器,定义了TimerId类,此类的设计很简单
class TimerId : public muduo::copyable
{
public:
TimerId()
: timer_(NULL),
sequence_(0)
{
}
TimerId(Timer* timer, int64_t seq)
: timer_(timer),
sequence_(seq)
{
}
// default copy-ctor, dtor and assignment are okay
friend class TimerQueue;
private:
Timer* timer_;
int64_t sequence_;

浙公网安备 33010602011771号