muduo源码分析---EventLoopThread

这个类只有两个对外接口的函数,一个构造函数,一个开始Loop的函数
类的内部成员:
        一个Loop指针 loop_(说明内部并没有实例化EventLoop)
        一个线程  thread_
        一个锁    Mutex
         一个条件变量 cond_
        一个初始化回调 callback_
EventLoopThread初始化传递的是函数回调,同时开启一个线程,线程函数运行的就是实例化一个EventLoop,并让这个EventLoop进入到loop状态。
        线程运行的函数为threadFunc,内部已经定义好,threadFunc内部初始化一个EventLoop,运行EventLoopThread内的回调callback_,将刚定义好的loop传入这个回调(现在这个回调肯定是EventLoopThread的拥有者注册进去的,然后EventLoopThread也就有了一个EventLoop,使用loop_指向他,在这个线程中这个EventLoop一直出于loop()状态)
        但是是谁启开了运行threadFunc这个函数呢?是EventLoopThread中的thread_.start()函数,开启之后,就反悔了一个EventLoopThread线程中管辖的那个EventLoop
        简而言之:
        EventLoopThread这个类的作用就是开启一个线程,但是这个线程中有一个EventLoop,并且让这个EventLoop处于loop()状态,在上篇文章中折腾了很久分析EventLoop,竟然在一个线程中开启了一个这么庞大的东西!!!!!!
        (假如在主程序中实例化一个EventLoopThread,那么主函数的threadid和EventLoopThread内部的EventLoop所处线程的threadid就不一样,这也就是为什么有queueInLoop()这个函数了,为什么有wakeupFd()这个函数了,在别的线程中想传递一个任务给另一个线程的EventLoop,那么就需要queueInLoop,然后再进行wakeup自己)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值