分享

用ACE实现计时器

 书剑阁2013 2015-04-24

在ACE中,事件的处理由全局的ACE_Reactor::instance()负责。

当某种事件产生时由ACE_Reactor::instance()->handle_events()来监听事件的发生。

其中,ACE_Reactor::instance()->schedule_timer()方法负责设置计时,当超时的时候会回调其ACE_Event_Handler类型参数对象的  handle_timeout方法。

其中 ACE_Reactor的schedule_timer()方法对应的四个参数如下

schedule_timer (ACE_Event_Handler *event_handler,
                               const void *arg,
                               const ACE_Time_Value &delay,
                               const ACE_Time_Value &interval = ACE_Time_Value::zero);

第一个参数指向一个ACE_Event_Handler类,该类提供了
virtual int handle_timeout (const ACE_Time_Value &tv,
                              const void *arg)
方法,当设置的间隔时间到达时,将触发ACE_Event_Handler的   handle_timeout方法

第二个参数表传送的参数,跟handle_timeout方法的arg参数对应

第三个参数表计时器开始起作用的时间,时间类对应为ACE_Time_Value类

第四个参数表计时器间隔执行的时间,如为0,则表计时器只计时一次

#include <ace/OS.h>  
#include <ace/Reactor.h>  
#include <iostream>
class MyTimerHandler : public ACE_Event_Handler  
{  

public:  
  MyTimerHandler(int delay,int inteval)  
  {  
    //注册回调器
    this->reactor(ACE_Reactor::instance());
    //设置回调器多长时间回调一次
    this->reactor()->schedule_timer(this,  
      0,    //传递handle_timeout给的参数  
      ACE_Time_Value(delay),  
      ACE_Time_Value(inteval));
  }  
  //定时器回调函数  
  int handle_timeout (const ACE_Time_Value ¤t_time,  
    const void * = 0)  
  {  
    std::cout<<"time out :: handle_timeout() "<<std::endl;
    return 0;  
  }  
};  

int main(int argc, char *argv[])   
{  
  //创建一个定时器
  MyTimerHandler mt(1,1);  
  //捕捉定时器到时事件,到时后,执行计时器的handle_timeout()方法
  ACE_Reactor::instance ()->run_reactor_event_loop();
 
  return 0;   
}
每隔一秒钟输出一行


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多