定周期执行任务的定时器,不需要在初始化的时候传入任务,只需要start的时候传入即可; start还可以指定定时器的执行周期interval、每次task执行完成后可以更改下一次执行周期的modify接口; 定时器的结束通过is_stop_这个std::atomic_bool值和std::condition_variable实现, start接口is_stop_ exchange为false,对exchange之前的值做检查也保证了不会重复start stop接口将is_stop_设置为true,并通知正在cv_上等待的start直接退出,接着等待std::future对象返回
More...
#include <UTimer.h>
定周期执行任务的定时器,不需要在初始化的时候传入任务,只需要start的时候传入即可; start还可以指定定时器的执行周期interval、每次task执行完成后可以更改下一次执行周期的modify接口; 定时器的结束通过is_stop_这个std::atomic_bool值和std::condition_variable实现, start接口is_stop_ exchange为false,对exchange之前的值做检查也保证了不会重复start stop接口将is_stop_设置为true,并通知正在cv_上等待的start直接退出,接着等待std::future对象返回
◆ UTimer()
◆ ~UTimer()
◆ start()
template<typename TTask , typename TMod >
| CVoid UTimer::start |
( |
CMSec |
interval, |
|
|
const TTask & |
task, |
|
|
const TMod & |
modify |
|
) |
| |
|
inline |
开始执行定时器
- Template Parameters
-
- Parameters
-
- Returns
std::launch::async:在调用async就开始创建线程。 std::launch::deferred:延迟加载方式创建线程。调用async时不创建线程,直到调用了future的get或者wait时才创建线程。
如果有时间修改函数,并且修改了时间 则修改下一次的休眠时间
如果任务执行时间 < 设定的时间,则消除任务耗时影响 如果任务执行时间 > 设定的时间,则继续sleep设定时长
◆ stop()
◆ cv_
| std::condition_variable UTimer::cv_ |
|
private |
◆ future_
| std::future<CVoid> UTimer::future_ {} |
|
private |
◆ is_stop_
| std::atomic<CBool> UTimer::is_stop_ { true } |
|
private |
◆ left_interval_
| CMSec UTimer::left_interval_ = 0 |
|
private |
◆ mutex_
| std::mutex UTimer::mutex_ |
|
private |
◆ origin_interval_
| CMSec UTimer::origin_interval_ = 0 |
|
private |
The documentation for this class was generated from the following file: