muduo库阅读(31)——Net部分:定时器(计时器)Timer

来源:互联网 发布:mac照片应用存在哪里 编辑:程序博客网 时间:2024/05/14 21:47
/* * 计时器、定时器 */namespace muduo{namespace net{/* * 主要用于定时器事件 */class Timer : boost::noncopyable{public:Timer(const TimerCallback& cb, Timestamp when, double interval): callback_(cb),  expiration_(when),  interval_(interval),  repeat_(interval > 0.0),  sequence_(s_numCreated_.incrementAndGet()){ }#ifdef __GXX_EXPERIMENTAL_CXX0X__Timer(TimerCallback&& cb, Timestamp when, double interval): callback_(std::move(cb)),  expiration_(when),  interval_(interval),  repeat_(interval > 0.0),  sequence_(s_numCreated_.incrementAndGet()){ }#endifvoid 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(); }private:// 定时器到期回调函数const TimerCallback callback_;// 到期时间Timestamp expiration_;// 周期长度const double interval_;// 是否为周期性的计时器(定时器)const bool repeat_;// 计时器的序号(由s_numCreated_计算而出)const int64_t sequence_;// 创建了多少个计时器static AtomicInt64 s_numCreated_;};}}

using namespace muduo;using namespace muduo::net;AtomicInt64 Timer::s_numCreated_;// 重新开始——重新设置到期时间void Timer::restart(Timestamp now){// 如果是周期性的定时器,那么重新设置到期时间if (repeat_){expiration_ = addTime(now, interval_);}else{expiration_ = Timestamp::invalid();}}


0 0
原创粉丝点击