diff --git a/src/UtilsCtrl/ThreadPool/UThreadPool.h b/src/UtilsCtrl/ThreadPool/UThreadPool.h index 8f466ea..075cee8 100644 --- a/src/UtilsCtrl/ThreadPool/UThreadPool.h +++ b/src/UtilsCtrl/ThreadPool/UThreadPool.h @@ -102,6 +102,16 @@ public: CGRAPH_CALLBACK_CONST_FUNCTION_REF onFinished = nullptr); /** + * 异步执行任务 + * @tparam FunctionType + * @param task + * @param index + */ + template + void execute(const FunctionType& task, + CIndex index = CGRAPH_DEFAULT_TASK_STRATEGY); + + /** * 获取根据线程id信息,获取线程index信息 * @param tid * @return diff --git a/src/UtilsCtrl/ThreadPool/UThreadPool.inl b/src/UtilsCtrl/ThreadPool/UThreadPool.inl index 4335593..0b5eff5 100644 --- a/src/UtilsCtrl/ThreadPool/UThreadPool.inl +++ b/src/UtilsCtrl/ThreadPool/UThreadPool.inl @@ -56,6 +56,20 @@ auto UThreadPool::commitWithPriority(const FunctionType& func, int priority) return result; } + +template +void UThreadPool::execute(const FunctionType& task, CIndex index) { + CIndex realIndex = dispatch(index); + if (realIndex >= 0 && realIndex < config_.default_thread_size_) { + primary_threads_[realIndex]->pushTask(std::move(task)); + } else if (CGRAPH_LONG_TIME_TASK_STRATEGY == realIndex) { + priority_task_queue_.push(std::move(task), CGRAPH_LONG_TIME_TASK_STRATEGY); + } else { + // 返回其他结果,放到pool的queue中执行 + task_queue_.push(std::move(task)); + } +} + CGRAPH_NAMESPACE_END #endif // CGRAPH_UTHREADPOOL_INL