Net——EventLoopThread類

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() 函數,其定義如下:
在這裏插入圖片描述

loop->runAfter() 函數最終調用TimerQueue類的addTimer()函數,在該函數內部,之前將loop->runInLoop()註釋掉了(參考第2節),所以此函數不支持異步調用。函數定義如下:
在這裏插入圖片描述
運行結果如下:
在這裏插入圖片描述
此時我們將121~122行註釋打開,註釋調123行,運行結果如下:
在這裏插入圖片描述

參考代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章