1. 程式人生 > >muduo原始碼分析---EventLoopThread

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