muduo原始碼分析---EventLoopThread
阿新 • • 發佈:2019-01-08
這個類只有兩個對外介面的函式,一個建構函式,一個開始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自己)