Hiva::CreateTimer
产品支持情况
产品  | 
是否支持  | 
|---|---|
x  | 
|
x  | 
|
√  | 
|
x  | 
|
x  | 
|
x  | 
功能说明
创建Timer定时器。
进程调用该接口,即创建并开始运行一个定时器。
- APP创建Timer过程中会订阅一个定时器的事件,定时器名称由APP名称+定时器+序列号生成,以保证唯一性。
 - APP通过Server/Client的Topic通信方式将定时器name和相关信息发送给定时器Server处理,等时间到期后,定时器Server发布该话题,通知到原APP,执行用户的回调函数。
 - 定时器Topic有单独的分组,不会与业务线程分组产生冲突,可以并发。
 
函数原型
1 | Hiva::Timer Hiva::CreateTimer(const Hiva::HivaDuration &timerPeriod, const TimerCallback &timerCb, const std::string &groupName, const bool oneshot = false, const bool autostart = true)  | 
参数说明
参数名  | 
输入/输出  | 
说明  | 
||
|---|---|---|---|---|
timerPeriod  | 
输入  | 
触发回调函数的周期,为框架标准的Duration类型。  | 
||
timerCb  | 
输入  | 
定时器到期后的回调函数,类型为TimerCallback,其中TimerEvent定义如下: using TimerCallback = std::function<void (const TimerEvent &)>; 
  | 
||
groupName  | 
输入  | 
调用OpenHiva::Init时创建的线程组。如果为确定性组,则使用确定性调度框架;否则使用操作系统的调度框架。  | 
||
oneshot  | 
输入  | 
定时器的模式标识。 
  | 
||
autostart  | 
输入  | 
定时器的启动标识。 
  | 
返回值
返回Hiva::Timer的handle,后续可基于该handle进行start、stop等操作。
约束说明
- 该接口优先使用Hiva clock时钟源,如果没有Hiva clock,则使用系统的wall clock。
 - 针对确定性定时器,入参的group将会被用于订阅定时器事件,之前该组订阅的事件将被取消掉。
 - 该接口创建的定时器,将使用操作系统自带的定时唤醒机制,不会使用基于硬件定时器的高精度用户态定时器。如果不使用Hiva clock,且需要高精度时钟,请调用Hiva::CreateWallTimer和Hiva::CreateSteadyTimer接口。
 - 建议在启动定时器时,立即确定是否使用simulation time(Hiva clock时钟源),避免中途切换到wall clock。因为时钟源的切换不会主动通知定时器,因此有可能时钟源已经切换,但定时器还在使用切换前的时钟源计时。
 - 如果中途切换了simulation time,则应该重启节点才能正常按照新的时钟源工作。
 
父主题: 定时器接口