/* */ #include "DHTTaskExecutor.h" #include #include "DHTTask.h" #include "Logger.h" #include "LogFactory.h" #include "a2functional.h" #include "fmt.h" namespace aria2 { DHTTaskExecutor::DHTTaskExecutor(size_t numConcurrent) : numConcurrent_(numConcurrent) {} DHTTaskExecutor::~DHTTaskExecutor() {} void DHTTaskExecutor::update() { execTasks_.erase(std::remove_if(execTasks_.begin(), execTasks_.end(), mem_fun_sh(&DHTTask::finished)), execTasks_.end()); size_t r = numConcurrent_-execTasks_.size(); while(r && !queue_.empty()) { SharedHandle task = queue_.front(); queue_.pop_front(); task->startup(); if(!task->finished()) { execTasks_.push_back(task); --r; } } A2_LOG_DEBUG(fmt("Executing %u Task(s). Queue has %u task(s).", static_cast(getExecutingTaskSize()), static_cast(getQueueSize()))); } } // namespace aria2