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为头文件路径,所有依赖都已包含在该目录下!
-
下载 cronscheduler 源码
- 你可以直接
git clone或下载压缩包。
- 你可以直接
-
包含头文件目录
- 在你的 CMake 或构建系统中添加:
include_directories(/path/to/cronscheduler/include)
- 或者在你的 IDE 项目设置中添加
cronscheduler/include为头文件搜索路径。
- 在你的 CMake 或构建系统中添加:
-
在你的代码中引入主头文件
#include "cronscheduler/cronscheduler.h"
-
使用 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();
-
编译并运行你的程序
- 只需正常编译,无需链接任何第三方库。
| 说明 | |
|---|---|
| 🧩 依赖管理 | croncpp.h 和 ctpl_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。
MIT