zoukankan      html  css  js  c++  java
  • handy源码阅读(一):EventBase类

    类EventBase继承于类EventBases,继承于noncopyable.  其中noncopyable是一个去除了拷贝构造和赋值构造的类。

    noncopyable:

    class noncopyable {
      public:
        noncopyable() = default;
        virtual ~nonocopyable() = default;
    
        noncopyable(const noncopyable& non) = delete;
        noncopyable& operator=(const noncopyable& non) = delete;
    };

    EventBases是一个包含返回EventBase指针的纯虚函数的纯虚类。

    EventBases:

    class EventBases : public noncopyable {
      public:
        virtual EventBase* allocBase() = 0;
    };

    EventBase是一个事件派发器,负责事件的添加,运行,循环处理。而实际的事件处理由EventsImp来完成,可以预见的是该类只有一个EventsImp类型的变量。

    EventBase:

    class EventBase : public EventBases {
      public:
        EventBase(int taskCapacity = 0); //指定任务队列大小
        ~EventBase();
    
        void loop_once(int waitMs);
        void loop();   //进入事件处理循环
        bool cancel(TimerId timerid);
    
        TimerId runAt();
        TimerId runAfter();
        
        EventBase& exit();  //退出事件循环
        bool exited();
        void wakeup();      //唤醒事件处理
    
        void safeCall(Task&& task);  //添加任务
    
        std::unique_ptr<EventsImp> imp_;  //实际的事件处理都由该变量来完成。
    };

    EventBase类中一些类型的定义:

    Task: typedef std::function<void()> Task.  Task是返回值为空的函数对象。

     TimerId:  typedef std::pair<int64_t, int64_t> TimerId.  TimerId是包含两个int类型的pair。

    EventBase可以看作是一个连接器,连接各个不同的类,接受或派发任务。

  • 相关阅读:
    在win8.1 64位环境下有关Oracle的安装和卸载
    动手又动脑
    二柱子四则运算(课堂练习)
    Java学生成绩绩点管理系统
    小学期第八周收获
    小学期第七周收获
    小学期第六周收获
    小学期第五周收获
    《大道至简》读后感
    小学期第四周收获
  • 原文地址:https://www.cnblogs.com/sssblog/p/11465301.html
Copyright © 2011-2022 走看看