# 多线程任务管理 **Repository Path**: cnmoon/qwen-cpp-jobmanager ## Basic Information - **Project Name**: 多线程任务管理 - **Description**: 支持任务自动归并的多线程任务管理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-06 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能任务调度器 ## 简介 本项目是一个使用C++11编写的智能任务调度器,无需第三方库。该调度器能够根据任务的调度周期和最大执行时间,自动优化线程数量,将多个任务合并到少数线程中执行,同时支持手动配置调度策略。 ## 功能特性 1. **统一任务接口**:所有任务必须实现统一的接口,包括执行逻辑、调度周期和最大执行时间。 2. **智能调度策略**: - 自动生成策略:根据任务周期和执行时间自动计算最优的线程合并策略 - 手动配置策略:支持人工指定任务分组 - 策略融合:手动配置优先,缺失时使用自动策略 3. **线程管理**: - 线程池初始化和管理 - 高精度定时器触发任务调度 - 线程数量优化 4. **优雅退出**:安全终止所有线程,避免资源泄漏 5. **监控统计**: - 实时状态获取 - 执行时间统计 - 超时任务日志记录 6. **日志系统**:集成日志功能,记录任务执行信息 ## 项目结构 ``` . ├── CMakeLists.txt # CMake构建配置 ├── JobScheduler.cpp # 调度器实现 ├── JobScheduler.h # 调度器头文件 ├── Logger.h # 日志系统 ├── ExampleJobs.h # 示例任务实现 ├── JobInterface.h # 任务接口定义 ├── test_main.cpp # 测试程序 ├── build.sh # 构建脚本 └── README.md # 本文件 ``` ## 编译和运行 ### 编译 ```bash ./build.sh ``` ### 运行测试程序 ```bash cd build ./JobSchedulerTest ``` ## 使用方法 1. 实现`JobInterface`接口创建自定义任务 2. 创建`JobScheduler`实例 3. 使用`setJobs()`注入任务列表 4. (可选)使用`setManualStrategy()`设置手动策略 5. 调用`initialize()`初始化调度器 6. 任务开始自动执行 7. 使用`shutdown()`优雅关闭调度器 ## 测试结果 测试程序包含5个不同类型的任务: - Job1: 周期1秒,最大执行时间100ms - Job2: 周期2秒,最大执行时间100ms - Job3: 周期5秒,最大执行时间300ms - Job4: 周期3秒,最大执行时间200ms(随机执行时间) - Job5: 周期4秒,最大执行时间100ms 测试验证了自动策略和手动策略两种模式,均能正常工作。 ## 设计细节 ### 任务接口 ```cpp class JobInterface { public: virtual ~JobInterface() = default; virtual void execute() = 0; virtual std::chrono::milliseconds getPeriod() const = 0; virtual std::chrono::milliseconds getMaxExecutionTime() const = 0; virtual std::string getId() const = 0; }; ``` ### 自动策略算法 基于任务周期和执行时间进行分组,确保线程内任务周期的最小公倍数兼容,且总执行时间不超过最小周期。 ### 手动策略配置 支持通过任务ID分组来手动指定哪些任务运行在同一线程中。 ## 依赖 - C++11兼容的编译器 - CMake 3.10或更高版本 - POSIX线程库(pthread) ## 许可证 本项目为示例实现,可根据需要自由使用和修改。