handy源码阅读(一):EventBase类

本文解析了EventBase的设计原理,包括其继承自noncopyable及EventBases类的特点,阐述了EventBase作为事件派发器的角色及其核心功能,如事件循环处理、任务添加等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类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可以看作是一个连接器,连接各个不同的类,接受或派发任务。

转载于:https://www.cnblogs.com/sssblog/p/11465301.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值