IThreadPool.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. #ifndef ITHREADPOOL_H
  2. #define ITHREADPOOL_H
  3. #include <functional>
  4. #include <memory>
  5. #include <future>
  6. #include <chrono>
  7. #include <string>
  8. namespace AVPlayer2 {
  9. namespace Core {
  10. /**
  11. * 线程池状态枚举
  12. */
  13. enum class ThreadPoolState {
  14. Stopped, // 停止状态
  15. Running, // 运行状态
  16. Stopping // 正在停止
  17. };
  18. /**
  19. * 任务优先级枚举
  20. */
  21. enum class TaskPriority {
  22. Low, // 低优先级
  23. Normal, // 普通优先级
  24. High, // 高优先级
  25. Critical // 关键优先级
  26. };
  27. /**
  28. * 任务状态枚举
  29. */
  30. enum class TaskState {
  31. Pending, // 等待执行
  32. Running, // 正在执行
  33. Completed, // 已完成
  34. Cancelled, // 已取消
  35. Failed // 执行失败
  36. };
  37. } // namespace Core
  38. namespace Types {
  39. /**
  40. * 任务信息
  41. */
  42. struct TaskInfo {
  43. std::string taskId; // 任务ID
  44. std::string taskName; // 任务名称
  45. Core::TaskPriority priority; // 任务优先级
  46. Core::TaskState state; // 任务状态
  47. std::chrono::system_clock::time_point createTime; // 创建时间
  48. std::chrono::system_clock::time_point startTime; // 开始时间
  49. std::chrono::system_clock::time_point endTime; // 结束时间
  50. std::string threadId; // 执行线程ID
  51. std::string errorMessage; // 错误信息
  52. TaskInfo() {
  53. priority = Core::TaskPriority::Normal;
  54. state = Core::TaskState::Pending;
  55. createTime = std::chrono::system_clock::now();
  56. }
  57. };
  58. /**
  59. * 线程池统计信息
  60. */
  61. struct ThreadPoolStats {
  62. int totalThreads; // 总线程数
  63. int activeThreads; // 活跃线程数
  64. int idleThreads; // 空闲线程数
  65. int pendingTasks; // 等待任务数
  66. int completedTasks; // 已完成任务数
  67. int failedTasks; // 失败任务数
  68. double averageTaskTime; // 平均任务执行时间(毫秒)
  69. double threadUtilization; // 线程利用率(0.0-1.0)
  70. ThreadPoolStats() {
  71. totalThreads = 0;
  72. activeThreads = 0;
  73. idleThreads = 0;
  74. pendingTasks = 0;
  75. completedTasks = 0;
  76. failedTasks = 0;
  77. averageTaskTime = 0.0;
  78. threadUtilization = 0.0;
  79. }
  80. };
  81. /**
  82. * 线程池配置
  83. */
  84. struct ThreadPoolConfig {
  85. int minThreads; // 最小线程数
  86. int maxThreads; // 最大线程数
  87. int maxQueueSize; // 最大队列大小
  88. std::chrono::milliseconds keepAliveTime; // 线程保活时间
  89. bool allowCoreThreadTimeout; // 是否允许核心线程超时
  90. std::string threadNamePrefix; // 线程名称前缀
  91. ThreadPoolConfig() {
  92. minThreads = 2;
  93. maxThreads = 8;
  94. maxQueueSize = 100;
  95. keepAliveTime = std::chrono::milliseconds(60000);
  96. allowCoreThreadTimeout = false;
  97. threadNamePrefix = "AVPlayer2-Thread-";
  98. }
  99. };
  100. } // namespace Types
  101. namespace Core {
  102. /**
  103. * 线程池抽象接口
  104. * 提供与平台无关的线程池功能
  105. */
  106. class IThreadPool {
  107. public:
  108. virtual ~IThreadPool() = default;
  109. /**
  110. * 初始化线程池
  111. * @param config 线程池配置
  112. * @return 是否初始化成功
  113. */
  114. virtual bool initialize(const Types::ThreadPoolConfig& config) = 0;
  115. /**
  116. * 启动线程池
  117. * @return 是否启动成功
  118. */
  119. virtual bool start() = 0;
  120. /**
  121. * 停止线程池
  122. * @param waitForCompletion 是否等待所有任务完成
  123. */
  124. virtual void stop(bool waitForCompletion = true) = 0;
  125. /**
  126. * 提交任务(无返回值)
  127. * @param task 任务函数
  128. * @param priority 任务优先级
  129. * @param taskName 任务名称
  130. * @return 任务ID
  131. */
  132. virtual std::string submitTask(std::function<void()> task,
  133. TaskPriority priority = TaskPriority::Normal,
  134. const std::string& taskName = "") = 0;
  135. /**
  136. * 提交任务(有返回值)
  137. * @param task 任务函数
  138. * @param priority 任务优先级
  139. * @param taskName 任务名称
  140. * @return 任务结果的future对象
  141. */
  142. template<typename F, typename... Args>
  143. auto submitTaskWithResult(F&& task, TaskPriority priority = TaskPriority::Normal,
  144. const std::string& taskName = "")
  145. -> std::future<typename std::result_of<F(Args...)>::type> {
  146. using ReturnType = typename std::result_of<F(Args...)>::type;
  147. auto taskPtr = std::make_shared<std::packaged_task<ReturnType()>>(
  148. std::bind(std::forward<F>(task))
  149. );
  150. std::future<ReturnType> result = taskPtr->get_future();
  151. submitTask([taskPtr](){ (*taskPtr)(); }, priority, taskName);
  152. return result;
  153. }
  154. /**
  155. * 取消任务
  156. * @param taskId 任务ID
  157. * @return 是否取消成功
  158. */
  159. virtual bool cancelTask(const std::string& taskId) = 0;
  160. /**
  161. * 等待任务完成
  162. * @param taskId 任务ID
  163. * @param timeout 超时时间(毫秒,-1表示无限等待)
  164. * @return 是否在超时前完成
  165. */
  166. virtual bool waitForTask(const std::string& taskId, int timeout = -1) = 0;
  167. /**
  168. * 等待所有任务完成
  169. * @param timeout 超时时间(毫秒,-1表示无限等待)
  170. * @return 是否在超时前完成
  171. */
  172. virtual bool waitForAllTasks(int timeout = -1) = 0;
  173. /**
  174. * 获取任务信息
  175. * @param taskId 任务ID
  176. * @return 任务信息
  177. */
  178. virtual Types::TaskInfo getTaskInfo(const std::string& taskId) = 0;
  179. /**
  180. * 获取线程池状态
  181. * @return 线程池状态
  182. */
  183. virtual ThreadPoolState getState() const = 0;
  184. /**
  185. * 获取线程池统计信息
  186. * @return 统计信息
  187. */
  188. virtual Types::ThreadPoolStats getStats() const = 0;
  189. /**
  190. * 调整线程池大小
  191. * @param newSize 新的线程数
  192. * @return 是否调整成功
  193. */
  194. virtual bool resize(int newSize) = 0;
  195. /**
  196. * 清空任务队列
  197. * @return 被清空的任务数
  198. */
  199. virtual int clearQueue() = 0;
  200. /**
  201. * 设置任务完成回调
  202. * @param callback 任务完成回调函数
  203. */
  204. virtual void setTaskCompletedCallback(
  205. std::function<void(const std::string&, TaskState)> callback) = 0;
  206. /**
  207. * 设置线程池状态变化回调
  208. * @param callback 状态变化回调函数
  209. */
  210. virtual void setStateChangedCallback(
  211. std::function<void(ThreadPoolState)> callback) = 0;
  212. /**
  213. * 设置错误回调
  214. * @param callback 错误回调函数
  215. */
  216. virtual void setErrorCallback(
  217. std::function<void(const std::string&, const std::string&)> callback) = 0;
  218. };
  219. /**
  220. * 线程池工厂接口
  221. */
  222. class IThreadPoolFactory {
  223. public:
  224. virtual ~IThreadPoolFactory() = default;
  225. /**
  226. * 创建线程池实例
  227. * @param name 线程池名称
  228. * @return 线程池智能指针
  229. */
  230. virtual std::unique_ptr<IThreadPool> createThreadPool(const std::string& name = "") = 0;
  231. /**
  232. * 获取默认线程池配置
  233. * @return 默认配置
  234. */
  235. virtual Types::ThreadPoolConfig getDefaultConfig() = 0;
  236. /**
  237. * 获取推荐的线程数
  238. * @return 推荐线程数
  239. */
  240. virtual int getRecommendedThreadCount() = 0;
  241. };
  242. } // namespace Core
  243. } // namespace AVPlayer2
  244. #endif // ITHREADPOOL_H