您的位置:首页 > 运维架构

muduo源码分析---EventLoopThread

2014-03-27 14:51 513 查看
这个类只有两个对外接口的函数,一个构造函数,一个开始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自己)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: