diff --git a/include/thread_pool.h b/include/thread_pool.h index 23db409..91d2a15 100644 --- a/include/thread_pool.h +++ b/include/thread_pool.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include "mutex.h" #include "timer.h" @@ -101,7 +102,7 @@ class ThreadPool { int64_t exe_time = now_time + delay * 1000; BGItem bg_item(++last_task_id_, exe_time, task); time_queue_.push(bg_item); - latest_[bg_item.id] = bg_item; + latest_.insert(bg_item.id); work_cv_.Signal(); return bg_item.id; } @@ -118,7 +119,7 @@ class ThreadPool { { MutexLock lock(&mutex_); if (running_task_id_ != task_id) { - BGMap::iterator it = latest_.find(task_id); + BGSet::iterator it = latest_.find(task_id); if (it == latest_.end()) { if (is_running != NULL) { *is_running = false; @@ -194,8 +195,8 @@ class ThreadPool { int64_t wait_time = (bg_item.exe_time - now_time) / 1000; // in ms if (wait_time <= 0) { time_queue_.pop(); - BGMap::iterator it = latest_.find(bg_item.id); - if (it != latest_.end() && it->second.exe_time == bg_item.exe_time) { + BGSet::iterator it = latest_.find(bg_item.id); + if (it != latest_.end()) { schedule_cost_sum_ += now_time - bg_item.exe_time; schedule_count_++; task = bg_item.task; @@ -251,7 +252,7 @@ class ThreadPool { : id(id_t), exe_time(exe_time_t), task(task_t) {} }; typedef std::priority_queue BGQueue; - typedef std::map BGMap; + typedef std::set BGSet; int32_t threads_num_; std::deque queue_; @@ -262,7 +263,7 @@ class ThreadPool { std::vector tids_; BGQueue time_queue_; - BGMap latest_; + BGSet latest_; int64_t last_task_id_; int64_t running_task_id_;