1、EventLoopThread(IO线程类) 任何一个线程,只要创建并运行了EventLoop,都称之为IO线程 IO线程不一定是主线程 muduo并发模型one loop per thread + threadpool(计算线程池) 为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程 EventLoopThread创建了一个线程 在线程
};//实现文件EventLoopThread::EventLoopThread(constThreadInitCallback& cb,conststring& name) :loop_(NULL),exiting_(false),thread_(std::bind(&EventLoopThread::threadFunc,this), name),mutex_(),cond_(mutex_),callback_(cb) { } EventLoopThread::~EventLoopThread() { exiting_ =true;if(loop...
TcpServer::start() 主要做了两件事:启动 EventLoopThreadPool 和启动 Acceptor 的监听。我们先关注第一件。 2. EventLoopThreadPool::start() - 创建并启动 I/O 线程 EventLoopThreadPool 负责管理一组 I/O 线程,每个线程运行一个 EventLoop。 void EventLoopThreadPool::start(const ThreadInitCallback& cb...
通常由用户指定. 线程池中EventLoopThread名称依赖于线程池名称boolstarted_;// 线程池是否启动标志intnumThreads_;// 线程数intnext_;// 新连接到来,所选择的EventLoopThread下标std::vector<std::unique_ptr<EventLoopThread>> threads_;// IO线程列表std::vector<EventLoop*> loops_;// EventLoop列表, 指向...
简介: EventLoopThread类包装了一个thread类和一个EventLoop类,(one loop per thread)是封装了一个EventLoop的独立线程。简介 EventLoopThread类包装了一个thread类和一个EventLoop类,(one loop per thread)是封装了一个EventLoop的独立线程 主要成员及属性解析 意为I/O线程类,EventLoopThread可以创建一个IO线程,...
(IO线程) EventLoop* loop = NULL; { MutexLockGuard lock(mutex_); while (loop_ == NULL) { cond_.wait(); //须要等待EventLoop对象的创建 } loop = loop_; //IO线程创建loop_赋给主线程 } return loop; //主线程返回IO线程创建的EventLoop对象 } void EventLoopThread::threadFunc() //创建...
EventLoopThread::EventLoopThread(const ThreadInitCallback& cb, const string& name) : loop_(NULL), exiting_(false), thread_(std::bind(&EventLoopThread::threadFunc, this), name), mutex_(), cond_(mutex_), callback_(cb) { } EventLoopThread::~EventLoopThread() ...
std::vector<std::unique_ptr<EventLoopThread> > threads_; std::vector<EventLoop*> loops_; 首先成员变量: baseLoop_是主线程的EventLoop,name_是名称标记,started_是线程池开启时标志位,numThreads是设置的线程总数量,next_是标记当前传递给外面的是第几个线程,threads_是线程集合vector指针,loops是循环类事...
在QEventLoop中启动QTimer的基本步骤如下: 首先,我们需要包含QTimer的头文件,即#include。 然后,我们可以创建一个QTimer对象,并设置其时间间隔。例如: std::thread t([](){QEventLoop loop;QTimer timer;timer.setInterval(1000); // 设置时间间隔为1000毫秒,即1秒// 这里是新线程需要执行的代码loop.exec()...
EventLoopThread.h class EventLoopThread : boost::noncopyable { public: typedef boost::function<void(EventLoop*)> ThreadInitCallback; EventLoopThread(const ThreadInitCallback& cb = ThreadInitCallback()); ~EventLoopThread(); EventLoop* startLoop(); // 启动线程,该线程就成为了IO线程 ...