From 531b130766c7bbdc60a8e64f6e920eae1c19355d Mon Sep 17 00:00:00 2001 From: ChunelFeng Date: Sun, 11 Aug 2024 22:53:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BA=86execute=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=B8=8D=E8=8E=B7=E5=8F=96=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=9A=84=E8=BF=94=E5=9B=9E=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E6=95=88=E7=8E=87=E6=8F=90=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/UtilsCtrl/ThreadPool/UThreadPool.h | 10 ++++++++++ src/UtilsCtrl/ThreadPool/UThreadPool.inl | 14 ++++++++++++++ 2 files changed, 24 insertions(+) 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