1. 作用
- 創建了一個線程,併線程函數中創建了一個EventLoop對象
2.成員變量
3.測試用例 Reactor_test06.cc
include <muduo/net/EventLoop.h>
#include <muduo/net/EventLoopThread.h>
#include <stdio.h>
using namespace muduo;
using namespace muduo::net;
void runInThread()
{
printf("runInThread(): pid = %d, tid = %d\n",
getpid(), CurrentThread::tid());
}
int main()
{
printf("main(): pid = %d, tid = %d\n",
getpid(), CurrentThread::tid());
EventLoopThread loopThread;
EventLoop* loop = loopThread.startLoop();
// 異步調用runInThread,即將runInThread添加到loop對象所在IO線程,讓該IO線程執行
loop->runInLoop(runInThread);
sleep(1);
// runAfter內部也調用了runInLoop,所以這裏也是異步調用
loop->runAfter(2, runInThread);
sleep(3);
loop->quit();
printf("exit main().\n");
}
首先創建一個EventLoopThread對象,其構造函數如下:
- 爲thread_設定了線程函數
調用 startLoop() 函數,其定義如下:
- thread_.start():創建一個線程,執行之前設置的線程函數,其定義如下:
- 創建EventLoop對象,開啓事件循環
loop->runAfter() 函數最終調用TimerQueue類的addTimer()函數,在該函數內部,之前將loop->runInLoop()註釋掉了(參考第2節),所以此函數不支持異步調用。函數定義如下:
運行結果如下:
此時我們將121~122行註釋打開,註釋調123行,運行結果如下: