include: co/tasked.h.
#co::Tasked
Tasked 类是一个简单的定时任务调度器,内部由单线程调度所有任务,但可以从任意线程添加任务。Tasked 中的任务阻塞时,会影响后面的所有任务,因此不推荐用 Tasked 调度可能会长时间阻塞的任务。
v3.0.1 将 Tasked 类加入 namespace co
中。
#constructor
1. Tasked();
2. Tasked(Tasked&& t);
- 1, 默认构造函数,对象创建完,调度线程即开始运行。
- 2, 移动构造函数,支持将 Tasked 对象放到 STL 容器中。
#destructor
~Tasked();
- 析构函数,退出任务调度线程。
#F
typedef std::function<void()> F;
- 任务类型,固定为
std::function<void()>
类型的函数。
#run_at
void run_at(F&& f, int hour, int minute=0, int second=0);
void run_at(const F& f, int hour, int minute=0, int second=0);
- 添加指定时刻运行的任务,f 将在
hour:minute:second
时刻运行一次。 - hour 必须是 0-23 之间的整数,minute 与 second 必须是 0-59 之间的整数,默认为 0。
#run_daily
void run_daily(F&& f, int hour=0, int minute=0, int second=0);
void run_daily(const F& f, int hour=0, int minute=0, int second=0);
- 添加每天指定时刻运行的周期性任务,f 将在每天的
hour:minute:second
时刻运行一次。 - hour 必须是 0-23 之间的整数,默认为 0,minute 与 second 是 0-59 之间的整数,默认为 0。
#run_every
void run_every(F&& f, int n);
void run_every(const F& f, int n);
- 添加每 n 秒运行一次的周期性任务。
#run_in
void run_in(F&& f, int n);
void run_in(const F& f, int n);
- 添加 n 秒后运行一次的任务。
#stop
void stop();
- 退出任务调度线程,析构函数中会自动调用此方法。
- 多次调用此方法是安全的。
#代码示例
co::Tasked s; // create and start the scheduler
s.run_in(f, 3); // run f 3 seconds later
s.run_every(std::bind(f, 0), 3); // run f every 3 seconds
s.run_at(f, 23); // run f once at 23:00:00
s.run_daily(f); // run f at 00:00:00 every day
s.run_daily(f, 23); // run f at 23:00:00 every day
s.run_daily(f, 23, 30); // run f at 23:30:00 every day
s.stop(); // stop the scheduler