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行,运行结果如下: