当前位置:首页 > 编程笔记 > 正文
已解决

muduo源码剖析之Timer定时器

来自网友在路上 193893提问 提问时间:2023-11-08 04:43:58阅读次数: 93

最佳答案 问答题库938位专家为你答疑解惑

简介

Timer 类是 muduo 网络库中的一个定时器类,用于在指定的时间间隔后执行某个任务。

Timer 类提供了一系列的方法来创建、启动、停止和删除定时器,以及设置定时器的时间间隔和回调函数等。

在 muduo 网络库中,Timer 类被广泛应用于各种网络任务中,例如定期发送心跳包、更新缓存、清理资源等。通过使用 Timer 类,我们可以方便地实现定时任务,提高网络应用程序的可靠性和稳定性。

以下是 muduo 网络库中 Timer 类的主要方法和功能:

  1. Timer::start():启动定时器,在指定的时间间隔后调用回调函数。
  2. Timer::stop():停止定时器,不再执行定时任务。
  3. Timer::restart():重新启动定时器,重新开始执行定时任务。
  4. Timer::reset():重新设置定时器的时间间隔和回调函数。
  5. Timer::getExpiryTime():获取定时器的到期时间。

通过使用 Timer 类,我们可以方便地实现各种定时任务,提高网络应用程序的可靠性和稳定性。同时,Timer 类也提供了一些高级功能,例如可以设置多个定时器,以及在多个线程中安全地使用定时器等。

源码剖析

Timer.h

// Copyright 2010, Shuo Chen.  All rights reserved.
// http://code.google.com/p/muduo/
//
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.// Author: Shuo Chen (chenshuo at chenshuo dot com)
//
// This is an internal header file, you should not include this.#ifndef MUDUO_NET_TIMER_H
#define MUDUO_NET_TIMER_H#include "muduo/base/Atomic.h"
#include "muduo/base/Timestamp.h"
#include "muduo/net/Callbacks.h"namespace muduo
{
namespace net
{///
/// Internal class for timer event.
///
class Timer : noncopyable
{public: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(); }private://超时回调函数const TimerCallback callback_;//时间戳Timestamp expiration_;//时间间隔const double interval_;//是否重复const bool repeat_;//顺序编号const int64_t sequence_;//生成顺序的编号static AtomicInt64 s_numCreated_;
};}  // namespace net
}  // namespace muduo#endif  // MUDUO_NET_TIMER_H

Timer.cc

// Copyright 2010, Shuo Chen.  All rights reserved.
// http://code.google.com/p/muduo/
//
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.// Author: Shuo Chen (chenshuo at chenshuo dot com)#include "muduo/net/Timer.h"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();}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"muduo源码剖析之Timer定时器":http://eshow365.cn/6-35047-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!