/* */ #include "DHTTaskExecutor.h" #include #include "DHTTask.h" #include "Logger.h" #include "LogFactory.h" #include "a2functional.h" #include "fmt.h" namespace aria2 { DHTTaskExecutor::DHTTaskExecutor(int numConcurrent) : numConcurrent_(numConcurrent) { } DHTTaskExecutor::~DHTTaskExecutor() = default; void DHTTaskExecutor::update() { execTasks_.erase(std::remove_if(execTasks_.begin(), execTasks_.end(), std::mem_fn(&DHTTask::finished)), execTasks_.end()); int r; if (static_cast(numConcurrent_) > execTasks_.size()) { r = numConcurrent_ - execTasks_.size(); } else { r = 0; } while (r && !queue_.empty()) { std::shared_ptr 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