acl  3.5.3.0
acl::timer_trigger< T > 模板类 参考

#include <trigger.hpp>

+ 类 acl::timer_trigger< T > 继承关系图:
+ acl::timer_trigger< T > 的协作图:

Public 类型

typedef std::map< long long, trigger_item< T > * > trigger_items_t
 
typedef trigger_items_t::iterator trigger_iter_t
 

Public 成员函数

 timer_trigger (void)
 
 ~timer_trigger (void)
 
void add (T *o)
 
int del (T *o)
 
long long trigger (void)
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

template<typename T>
class acl::timer_trigger< T >

定时任务触发管理器,通过本类添加定时任务,该类会将到期的任务进行触发 每个定时任务对象 T 需要实现以下方法,以便于由该触发器触发

bool on_trigger(void); // 定时时间到期时的回调方法,返回值表示 // 是否需要再次触发该定时任务 int get_ttl(void) const; // 定时任务到达时的时间间隔(毫秒) void set_key(long long key); // 触发器设置与该定时任务关联的键 long long get_key(void) const; // 获得由 set_key 设置的键

如一个 T 的实例类声明如下: class mytask { public: mytask(void) {} ~mytask(void) {}

// @override bool on_trigger(void) { return true; }

// @override int get_ttl(void) const { return 1000; }

// @override void set_key(long long key) { key_ = key; }

// @override long long get_key(void) const { return key_; }

private: long long key_; };

在文件 trigger.hpp113 行定义.

成员类型定义说明

◆ trigger_items_t

template<typename T >
typedef std::map<long long, trigger_item<T>*> acl::timer_trigger< T >::trigger_items_t

在文件 trigger.hpp116 行定义.

◆ trigger_iter_t

template<typename T >
typedef trigger_items_t::iterator acl::timer_trigger< T >::trigger_iter_t

在文件 trigger.hpp117 行定义.

构造及析构函数说明

◆ timer_trigger()

template<typename T >
acl::timer_trigger< T >::timer_trigger ( void  )
inline

在文件 trigger.hpp119 行定义.

119 {}

◆ ~timer_trigger()

template<typename T >
acl::timer_trigger< T >::~timer_trigger ( void  )
inline

在文件 trigger.hpp120 行定义.

120 {}

成员函数说明

◆ add()

template<typename T >
void acl::timer_trigger< T >::add ( T *  o)
inline

添加一个任务对象 @pararm o {T*}

在文件 trigger.hpp126 行定义.

127  {
128  int ttl = o->get_ttl();
129  long long key = get_curr_stamp() + ttl;
130 
131  trigger_item<T>* item;
132  trigger_iter_t it = items_.find(key);
133  if (it == items_.end()) {
134  item = new trigger_item<T>(items_);
135  items_[key] = item;
136  } else
137  item = it->second;
138  item->add(o);
139  o->set_key(key);
140  }
trigger_items_t::iterator trigger_iter_t
Definition: trigger.hpp:117
ACL_CPP_API long long get_curr_stamp(void)

引用了 acl::trigger_item< T >::add() , 以及 acl::get_curr_stamp().

+ 函数调用图:

◆ del()

template<typename T >
int acl::timer_trigger< T >::del ( T *  o)
inline

删除一个任务对象,内部调用 o->get_key() 方法获得该任务对象的键 @pararm o {T*} 指定将被删除的任务对象

返回
{int} >= 0 时表示剩余的任务对象,-1 表示该任务对象不存在

在文件 trigger.hpp147 行定义.

148  {
149  long long key = o->get_key();
150  trigger_iter_t it = items_.find(key);
151 
152  if (it == items_.end())
153  return -1;
154  if (it->second->del(o) == 0) {
155  delete it->second;
156  items_.erase(it);
157  }
158  return (int) items_.size();
159  }
trigger_items_t::iterator trigger_iter_t
Definition: trigger.hpp:117

◆ trigger()

template<typename T >
long long acl::timer_trigger< T >::trigger ( void  )
inline

触发所有到期的定时任务

返回
{long long} 返回下一个将被触发的定时任务的时间截,返回 -1 表示没有定时任务

在文件 trigger.hpp166 行定义.

167  {
168  long long key = get_curr_stamp();
169  std::vector<trigger_item<T>*> items;
170  trigger_iter_t iter;
171  for (iter = items_.begin(); iter != items_.end();) {
172  if (iter->first > key)
173  break;
174 
175  items.push_back(iter->second);
176  items_.erase(iter++);
177  }
178 
179  for (typename std::vector<trigger_item<T>*>::iterator
180  it = items.begin(); it != items.end(); ++it) {
181 
182  trigger(*it);
183  delete *it;
184  }
185 
186  iter = items_.begin();
187  if (iter == items_.end())
188  return -1;
189  return iter->first;
190  }
trigger_items_t::iterator trigger_iter_t
Definition: trigger.hpp:117
long long trigger(void)
Definition: trigger.hpp:166
ACL_CPP_API long long get_curr_stamp(void)

引用了 acl::get_curr_stamp().

+ 函数调用图:

该类的文档由以下文件生成: