Skip to content

cronscheduler 是一个现代 C++17 定时任务调度库,支持 cron 表达式语法,任务自动异步提交线程池执行,轻松实现高性能定时任务系统。 依赖均为 header-only,项目结构清晰,集成极为简单!

Notifications You must be signed in to change notification settings

Cloverdfn/cronscheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

⏰ cronscheduler

cronscheduler 是一个现代 C++17 定时任务调度库,支持 cron 表达式语法,任务自动异步提交线程池执行,轻松实现高性能定时任务系统。
依赖均为 header-only,项目结构清晰,集成极为简单!


🚀 特性

  • Cron表达式调度:支持秒级调度,语法与 Linux cron 兼容
  • 线程池异步执行:任务不阻塞主线程,自动分发到线程池
  • Header-only依赖:集成只需包含一个文件夹,方便移植
  • 线程安全:多线程安全,任务可随时添加/移除
  • 现代C++ API:使用智能指针和函数对象,易用且安全

📦 项目结构

cronscheduler/
├── include/
│   ├── cronscheduler/
│   │   └── cronscheduler.h      # 主头文件(包含全部实现)
│   ├── croncpp/
│   │   └── croncpp.h            # cron表达式解析(header-only)
│   └── ctpl_stl.h               # 线程池(header-only)
├── example/
│   └── main.cpp                 # 用法示例
├── CMakeLists.txt
└── README.md

🔥 调用方只需设置 include 为头文件路径,所有依赖都已包含在该目录下!


🛠️ 集成步骤

  1. 下载 cronscheduler 源码

    • 你可以直接 git clone 或下载压缩包。
  2. 包含头文件目录

    • 在你的 CMake 或构建系统中添加:
      include_directories(/path/to/cronscheduler/include)
    • 或者在你的 IDE 项目设置中添加 cronscheduler/include 为头文件搜索路径。
  3. 在你的代码中引入主头文件

    #include "cronscheduler/cronscheduler.h"
  4. 使用 API 创建调度器并添加任务

    cronscheduler::Scheduler scheduler(4); // 4线程池
    
    scheduler.add_job("*/5 * * * * *", []() {
        std::cout << "每5秒执行一次" << std::endl;
    });
    
    scheduler.add_job("0 */1 * * * *", []() {
        std::cout << "每分钟执行一次" << std::endl;
    });
    
    scheduler.start();
    
    std::this_thread::sleep_for(std::chrono::minutes(3));
    scheduler.stop();
  5. 编译并运行你的程序

    • 只需正常编译,无需链接任何第三方库。

⚡ 注意事项

⚠️ 注意点 说明
🧩 依赖管理 croncpp.hctpl_stl.h 都是header-only,已集成在 include/ 下,无需单独下载
🔒 线程安全 任务增删和调度均为线程安全,但建议避免高频率竞争性操作
🏷️ Cron表达式 支持秒级调度,表达式格式为 "秒 分 时 日 月 星期"
🏃 线程池大小 构造 Scheduler 时可自定义线程数,根据任务量合理调整
🛑 停止调度器 使用 stop() 安全停止调度循环,析构时也会自动停止
📝 任务异常 任务异常会被捕获并忽略(可自定义处理行为)
🗂️ 包含路径 推荐只设置 include/ 为搜索路径,避免 IDE 配置混乱
🤔 多平台支持 只依赖标准库和 header-only 库,兼容主流平台

🎉 示例程序

#include "cronscheduler/cronscheduler.h"
#include <iostream>
#include <thread>

int main() {
    cronscheduler::Scheduler scheduler(4);

    scheduler.add_job("*/5 * * * * *", [](){
        std::cout << "[job1] 每5秒执行, 线程ID:" << std::this_thread::get_id() << std::endl;
    });
    scheduler.add_job("0 */1 * * * *", [](){
        std::cout << "[job2] 每分钟执行, 线程ID:" << std::this_thread::get_id() << std::endl;
    });

    scheduler.start();

    std::this_thread::sleep_for(std::chrono::minutes(3));
    scheduler.stop();
    return 0;
}

💡 常见问题

  • Q: 需要链接第三方库吗?
    A: 不需要,所有依赖均为 header-only,直接包含即可。

  • Q: 可以动态添加或删除任务吗?
    A: 可以,线程安全,随时可操作。

  • Q: 支持跨平台吗?
    A: 只依赖标准库和 header-only 库,支持主流 Linux/Mac/Windows。


📚 参考


🎈 License

MIT


About

cronscheduler 是一个现代 C++17 定时任务调度库,支持 cron 表达式语法,任务自动异步提交线程池执行,轻松实现高性能定时任务系统。 依赖均为 header-only,项目结构清晰,集成极为简单!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published