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自己)

你可能感兴趣的:(muduo源码分析,muduo源码分析)