Muduo网络库的实现Channel class(二)

源码下载以及安装点击链接https://blog.csdn.net/YoungSusie/article/details/90021742

分类 Muduo网络库编程 学习笔记

Reactor 最核心的 事件分发机制,即将IO复用拿到的IO事件分发给各个对应的文件描述符的事件处理函数。

每个Channel对象自始自终只属于一个Event Loop,因此每个Channel 对象只属于一个IO线程。 每个Channel 对象自始自终只负责一个文件描述符的IO事件分发, 但是Channel 对象并不拥有这个文件描述符,不会在析构的时候关闭这个文件描述符。 Channel 会将不同的IO事件分发为不同的回调,例如 Readcallback 、 writecallback 等,回调采用的是 boost::function,用通用的函数模板,实现不同fd的事件回调函数 表示,用户无需继承Channel, Channel不是基类。

1、学习笔记

  1. boost::function 和 boost::bind 头文件<booost/function.hpp>
    boost.function 库用来提供一个对象化的函数指针。这个对象用于封装另一个函数。

boost::function 是一个函数包装器(也叫函数模板) ,可以用来代替拥有相同返回类型,相同参数类型,以及相同参数个数的各个不同的函数。函数的具体实现可以根据需要改变,类似C++中的多态。

typedef boost::function<int(int,char)> fun; //函数返回值为int ,参数分别为int char
fun f;
f = &test;//test 为具体实现的函数名。

当function f 首次创建时,不保存任何函数,是空的。不可调用一个没有保存任何函数或者函数对象的 function,会抛出错误。 需要将另外的函数的指针赋值给 f 。

  1. 类成员函数------转载自https://blog.csdn.net/benny5609/article/details/2324474

Boost.Function 不支持参数绑定,这在每次调用一个function 就要调用同一个类实例的成员函数时是需要的。幸运的是,如果这个类实例被传递给function的话,可以直接调用它的成员函数。这个function 必须包含类的类型以及成员函数的签名。换言之,显示传入的 类实例要作为隐式传递的第一个参数,this。

  • 传递值
class some_class {
   
public:
  void do_stuff(int i) const {
   
    std::cout << "OK. Stuff is done. " << i << '/n';
  }
};

如果成员函数 do_stuff要从一个boost::function 实例里被调用,需要function接受一个some_class实例,签名的其他部分为一个void 返回以及一个int参数。

boost::function<void(some_class,int)> f;

调用的时候:

f=&some_class::do_stuff;
f(some_class(),2);
  • 传递引用
boost::function<void(some_class&
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值