CGraph
Public Member Functions | Private Attributes | List of all members
UTimer Class Reference

定周期执行任务的定时器,不需要在初始化的时候传入任务,只需要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>

Inheritance diagram for UTimer:
Inheritance graph
[legend]
Collaboration diagram for UTimer:
Collaboration graph
[legend]

Public Member Functions

 UTimer ()=default
 
 ~UTimer () override
 
template<typename TTask , typename TMod >
CVoid start (CMSec interval, const TTask &task, const TMod &modify)
 
CVoid stop ()
 
- Public Member Functions inherited from CObject
 CObject ()=default
 
virtual CStatus init ()
 
virtual CStatus destroy ()
 
virtual ~CObject ()=default
 

Private Attributes

std::atomic< CBoolis_stop_ { true }
 
std::mutex mutex_
 
std::condition_variable cv_
 
std::future< CVoidfuture_ {}
 
CMSec origin_interval_ = 0
 
CMSec left_interval_ = 0
 

Additional Inherited Members

- Protected Member Functions inherited from UtilsObject
CStatus run () override
 

Detailed Description

定周期执行任务的定时器,不需要在初始化的时候传入任务,只需要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对象返回

Constructor & Destructor Documentation

◆ UTimer()

UTimer::UTimer ( )
default

◆ ~UTimer()

UTimer::~UTimer ( )
inlineoverride
Here is the call graph for this function:

Member Function Documentation

◆ start()

template<typename TTask , typename TMod >
CVoid UTimer::start ( CMSec  interval,
const TTask &  task,
const TMod &  modify 
)
inline

开始执行定时器

Template Parameters
TTask
TMod
Parameters
interval
task
modify
Returns

std::launch::async:在调用async就开始创建线程。 std::launch::deferred:延迟加载方式创建线程。调用async时不创建线程,直到调用了future的get或者wait时才创建线程。

如果有时间修改函数,并且修改了时间 则修改下一次的休眠时间

如果任务执行时间 < 设定的时间,则消除任务耗时影响 如果任务执行时间 > 设定的时间,则继续sleep设定时长

Here is the call graph for this function:

◆ stop()

CVoid UTimer::stop ( )
inline

关闭定时器

Member Data Documentation

◆ 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: