木铎源码剖析—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_;
posted @ 2024-02-28 20:37  孟秋十三  阅读(11)  评论(0)    收藏  举报