![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
muduo库学习
开始学习网络编程,muduo库
sunximei1
这个作者很懒,什么都没留下…
展开
-
muduo网络库学习--EventLoop(二)
//EvengtLoop.h/.ccvoid EventLoop::loop(){ ... while (!quit_) { ... pollReturnTime_ = poller_->poll(kPollTimeMs, &activeChannels_); //返回活动通道 ... // TODO sort channel by priority eventHandling_ = true; for (Channel* cha原创 2021-04-28 13:25:09 · 102 阅读 · 0 评论 -
muduo网络库学习--定时器
muduo定时器由 定时器类定义,由定时器队列来维护//Timer.h/.ccclass Timer : noncopyable{ ...private: const TimerCallback callback_; //定时器回调函数 Timestamp expiration_; //下一次超时时刻 const double interval_; //超时时间间隔,如果是一次性定时器,该值为0 const bool repeat_; //是否重复 const int64_t原创 2021-04-27 16:16:30 · 337 阅读 · 0 评论 -
muduo网络库学习--EventLoop
muduo网络库使用 muiltiple reactors + threadpool(one loop per thread + threadpool) 模型。one loop per thread :每个线程最多只能有一个EventLoop对象,如果已经创建,则终止程序(LOG_FATAL)EventLoop构造函数会记住本对象所属线程(threadId_)创建了EventLoop对象的线程称为IO线程,其功能是运行事件循环(EventLoop::loop)...原创 2021-04-23 11:08:27 · 136 阅读 · 0 评论 -
muduo网络库学习--类的层次关系
外部类内部类实心菱形:组合空心菱形:聚合组合关系:组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;它同样体现整体与部分间的关系,但此时整体与部分是不可分的,它们具有统一的生存期,整体的生命周期结束也就意味着部分的生命周期结束,部分对象与整体对象之间具有同生共死的关系,组合关系中的部分,是不能在整体之间进行共享的。比如人和眼睛。EventLoop和Poller是组合关系:强拥有,一个EventLoop对应一个Poller。Poller的生存期原创 2021-04-23 10:30:36 · 227 阅读 · 0 评论 -
muduo基础库学习--日志
日志级别TRACE:比DEBUG更详细(开发过程中使用)DEBUG:较详细(开发过程中使用)INFO:粗粒度,突出运行过程WARN:警告。可运行,但可能有潜在错误ERROR:发生错误,但不影响系统继续运行FATAL:严重错误,导致应用程序退出日志级别可更改,以适应不同阶段开发。//Logging.h#define LOG_TRACE if (muduo::Logger::logLevel() <= muduo::Logger::TRACE) \ muduo::Logger(_原创 2021-04-19 09:33:54 · 177 阅读 · 0 评论 -
muduo基础库学习--单例模式、ThreadLocal封装
单例//singleton.htemplate<typename T>class Singleton : noncopyable{ public: ... static T& instance() { //保证只在第一次调用时,触发init方法,实现单例。且线程安全,效率高 pthread_once(&ponce_, &Singleton::init); assert(value_ != NULL); return *val原创 2021-04-13 12:27:28 · 133 阅读 · 0 评论 -
muduo基础库学习--线程池实现
线程池基于生产者消费者概念:生产者–>任务队列–>线程队列–>消费者//ThreadPool.hclass ThreadPool : noncopyable{ public: typedef std::function<void ()> Task;//任务函数,即任务队列中的元素...}//ThreadPool.cc//ThreadPool.ccvoid ThreadPool::start(int numThreads)//主线程调用{ asse原创 2021-04-12 11:27:44 · 122 阅读 · 0 评论 -
muduo基础库学习--锁、条件变量的封装
//Mutex.hclass MutexLock : noncopyable{ public: MutexLock() : holder_(0) { MCHECK(pthread_mutex_init(&mutex_, NULL)); } ~MutexLock() { assert(holder_ == 0); MCHECK(pthread_mutex_destroy(&mutex_)); } // must be cal原创 2021-04-08 12:36:10 · 91 阅读 · 0 评论 -
muduo基础库学习--线程封装
线程标识符Linux中,每个进程有一个pid, 类型为pid_t, 由getpid()获得;Linux下POSIX线程也有id,类型为pthread_t, 由pthread_self()获得,其id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。POSIX线程库的实现也是一个进程;有时需要从一个进程p1向另外一个进程的线程p2发送信号时,既不能使用p2的pid,更不能使用p2的pthread id, 而只能使用该线程的真实pid,称为tid。由gettid() 可得.原创 2021-04-08 09:54:00 · 98 阅读 · 0 评论 -
muduo基础库学习--异常处理
Exception实现//原创 2021-04-07 10:06:19 · 201 阅读 · 0 评论 -
muduo基础库学习(二)
1. Types.htemplate<typename To, typename From>inline To implicit_cast(From const &f){ return f;}template<typename To, typename From>inline To down_cast(From* f){ if (false) { implicit_cast<From*, To>(0); }#if !de原创 2021-03-29 10:51:43 · 105 阅读 · 0 评论 -
muduo基础库学习(一)
Timestamp类封装继承muduo::copyablemuduo::copyable 空基类,标识类,表示值类型;值语义:可以拷贝的,拷贝后,与原对象脱离关系对象语义:要么不能拷贝;要么可以拷贝,但拷贝后仍与原对象存在一定的关系,比如共享底层资源(要实现自己的拷贝构造函数)1. BOOST_STATIC_ASSERT我下载的版本里是没有这个宏的;但是实现都是一样的,使用boost库的static_assertstatic_assert(sizeof(Timestamp) == sizeof原创 2021-03-26 17:17:37 · 193 阅读 · 0 评论