/** * * EventLoopThreadPool.cc * An Tao * * Public header file in trantor lib. * * Copyright 2018, An Tao. All rights reserved. * Use of this source code is governed by a BSD-style license * that can be found in the License file. * * */ #include using namespace trantor; EventLoopThreadPool::EventLoopThreadPool(size_t threadNum, const std::string &name) : loopIndex_(0) { for (size_t i = 0; i < threadNum; ++i) { loopThreadVector_.emplace_back(std::make_shared(name)); } } void EventLoopThreadPool::start() { for (unsigned int i = 0; i < loopThreadVector_.size(); ++i) { loopThreadVector_[i]->run(); } } // void EventLoopThreadPool::stop(){ // for(unsigned int i=0;iwait(); } } EventLoop *EventLoopThreadPool::getNextLoop() { if (loopThreadVector_.size() > 0) { EventLoop *loop = loopThreadVector_[loopIndex_]->getLoop(); ++loopIndex_; if (loopIndex_ >= loopThreadVector_.size()) loopIndex_ = 0; return loop; } return nullptr; } EventLoop *EventLoopThreadPool::getLoop(size_t id) { if (id < loopThreadVector_.size()) return loopThreadVector_[id]->getLoop(); return nullptr; } std::vector EventLoopThreadPool::getLoops() const { std::vector ret; for (auto &loopThread : loopThreadVector_) { ret.push_back(loopThread->getLoop()); } return ret; }