Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console::Scheduler Class Reference

基于条件变量的简单调度器,用于延迟执行或周期性的后台任务。 More...

#include <sched.h>

Public Member Functions

template<class Rep, class Period, class Func>
void schedule (const std::chrono::duration< Rep, Period > &duration, Func &&func)
 在指定延时后执行一次函数。
template<class Func>
void schedule (Time duration, Func &&func)
 便捷重载:以 console::Time 指定延时后执行一次函数。
template<class Func>
void schedule (double seconds, Func &&func)
 便捷重载:以秒为单位指定延时后执行一次函数。
template<class Rep, class Period, class Func>
void interval (const std::chrono::duration< Rep, Period > &duration, Func &&func)
 按照固定间隔周期性地执行函数。
template<class Func>
void interval (Time duration, Func &&func)
 便捷重载:以 console::Time 指定间隔周期性地执行函数。
template<class Func>
void interval (double seconds, Func &&func)
 便捷重载:以秒为单位指定间隔周期性地执行函数。
void cancel_all ()
 取消所有待执行 / 正在等待的任务,并唤醒所有等待线程。
 ~Scheduler ()
 析构函数,先取消所有任务,再等待所有 interval 线程退出。

Private Attributes

std::mutex mut
 保护共享状态的互斥锁
std::condition_variable cv
 用于唤醒/取消等待线程的条件变量
std::atomic< bool > canceled
 取消标志,置位后所有等待线程立即唤醒
std::vector< std::thread > threads
 interval() 创建的持续运行线程集合

Detailed Description

基于条件变量的简单调度器,用于延迟执行或周期性的后台任务。

Note
通过条件变量和取消标志实现唤醒与取消,依赖 std::mutex 保护共享状态。
Warning
请不要做这些事情:
  • 在提供给 schedule 或者 interval 的函数中抛出异常 -> terminate
  • 提供一个可能长时间运行的函数给 interval -> 调度间隔错误
  • 在定时器函数中指涉一个可能被提前销毁的对象 -> 悬挂

Constructor & Destructor Documentation

◆ ~Scheduler()

console::Scheduler::~Scheduler ( )
inline

析构函数,先取消所有任务,再等待所有 interval 线程退出。

Member Function Documentation

◆ cancel_all()

void console::Scheduler::cancel_all ( )
inline

取消所有待执行 / 正在等待的任务,并唤醒所有等待线程。

Note
通过 release 语义写 canceled,随后 notify_all 唤醒所有阻塞线程, 使其谓词判断到取消标志并立即返回。

◆ interval() [1/3]

template<class Rep, class Period, class Func>
void console::Scheduler::interval ( const std::chrono::duration< Rep, Period > & duration,
Func && func )
inline

按照固定间隔周期性地执行函数。

Template Parameters
Rep计时的刻度类型。
Periodstd::ratio 类型,表示时间刻度与秒的比例。
Func可调用对象类型。
Parameters
duration两次执行之间的时间间隔。
func每个周期要执行的函数。
Note
线程被记录在 threads 中并由析构函数统一 join,因此不会泄漏线程。 每个周期等待结束后先解除锁再做 func(),避免长时间持锁。

◆ interval() [2/3]

template<class Func>
void console::Scheduler::interval ( double seconds,
Func && func )
inline

便捷重载:以秒为单位指定间隔周期性地执行函数。

Parameters
seconds两次执行之间的间隔秒数(可含小数)。
func每个周期要执行的函数。
Note
内部将秒转换为整数纳秒后转发,精度截断到纳秒。

◆ interval() [3/3]

template<class Func>
void console::Scheduler::interval ( Time duration,
Func && func )
inline

便捷重载:以 console::Time 指定间隔周期性地执行函数。

Parameters
duration两次执行之间的时间间隔(以纳秒计)。
func每个周期要执行的函数。

◆ schedule() [1/3]

template<class Rep, class Period, class Func>
void console::Scheduler::schedule ( const std::chrono::duration< Rep, Period > & duration,
Func && func )
inline

在指定延时后执行一次函数。

Template Parameters
Rep计时的刻度类型。
Periodstd::ratio 类型,表示时间刻度与秒的比例。
Func可调用对象类型。
Parameters
duration延时的时间长度,从调用时刻起算。
func延时结束后要执行的函数。
Note
分离线程,调用方不需要也不能 join。
Warning
若函数执行时间超过延时,cancel_all() 无法中断其运行,只能阻止其启动。

◆ schedule() [2/3]

template<class Func>
void console::Scheduler::schedule ( double seconds,
Func && func )
inline

便捷重载:以秒为单位指定延时后执行一次函数。

Parameters
seconds延时秒数(可含小数)。
func延时结束后要执行的函数。
Note
内部将秒转换为整数纳秒后转发,精度截断到纳秒。

◆ schedule() [3/3]

template<class Func>
void console::Scheduler::schedule ( Time duration,
Func && func )
inline

便捷重载:以 console::Time 指定延时后执行一次函数。

Parameters
duration延时长度(以纳秒计,内部转换为 std::chrono::nanoseconds)。
func延时结束后要执行的函数。

Member Data Documentation

◆ canceled

std::atomic<bool> console::Scheduler::canceled
private
Initial value:
{
false}

取消标志,置位后所有等待线程立即唤醒

◆ cv

std::condition_variable console::Scheduler::cv
private

用于唤醒/取消等待线程的条件变量

◆ mut

std::mutex console::Scheduler::mut
private

保护共享状态的互斥锁

◆ threads

std::vector<std::thread> console::Scheduler::threads
private

interval() 创建的持续运行线程集合


The documentation for this class was generated from the following file: