注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[ACE] Timer  

2009-12-08 21:11:52|  分类: net_ACE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
ACE 的 Timer Handler 要继承自 ACE_Event_Handler,重载 handle_timeout() 函数即可。

对于 timer dispatch,ACE 抽象了接口 ACE_Timer_Queue:
                                 ACE_Timer_Queue
                                                  |
          ---------------------------------------------------------------------
          |                           |                              |                          |
Timer_Heap     Timer_Wheel       Timer_Hash      Timer_List
使用者可根据业务逻辑,选择最合适的 Timer_Queue。

而触发 Timer_Queue 的调度行为,也任选,比如:ACE_Event, ACE_Thread_Timer_Queue_Adapter, ACE_Reactor, ACE_Proactor。
其中 Reactor, Proactor 可通过 schedule_timer() 函数注册定时器。

这里有篇不错的文字:
http://blog.csdn.net/wj4064/archive/2008/04/03/2247752.aspx

下面以 Reactor 为例子,写了个简单的 timer。
#include <ace/Reactor.h>
#include <ace/Time_Value.h>
#include <ace/Log_Msg.h>
#include <ace/Event_Handler.h>

class MyTimer : public ACE_Event_Handler
{
public:
        virtual int handle_timeout(const ACE_Time_Value &current_time, const void *arg)
        {
                const int num = ACE_reinterpret_cast(const int, arg);
                ACE_DEBUG((LM_DEBUG, ACE_TEXT("arg = %d\n"), num));
                return 0;
        }
};


#define SEC_PER_TICK            3       // 3 second / tick

int ACE_MAIN(int, ACE_TCHAR *[])
{
        ACE_Time_Value interval(SEC_PER_TICK);
        ACE_Reactor::instance()->schedule_timer( new MyTimer(),
                ACE_reinterpret_cast(const void *, SEC_PER_TICK), interval, interval);
        ACE_Reactor::instance()->run_reactor_event_loop();
        return 0;
}
  评论这张
 
阅读(1339)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017