zoukankan      html  css  js  c++  java
  • ACE反应器(Reactor)模式(4)

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/596012.html

    定时器的实现

    通过Reactor机制,还可以很容易的实现定时器的功能,使用方式如下。

    1. 编写一个事件反应器,重载handle_timeout()方法,该方法是定时器的触发时间到时,会自动触发该方法。
    2. 通过Reactor的schedule_timer()方法注册定时器。
    3. 启动reacotr的handle_events()事件分发循环。
    4. 当不想使用定时器时,可以通过Reactor的cancel_timer()方法注销定时器。

    下面的代码简单的实现了一个定时器,并具有基本的开启,关闭功能。

     1 #include <ace/OS.h>
     2 #include <ace/Reactor.h>
     3 
     4 class MyTimerHandler : public ACE_Event_Handler
     5 {
     6 private:
     7     int inteval;    //执行时间间隔
     8     int delay;        //延迟执行时间
     9     int timerid;
    10 
    11 public:
    12     MyTimerHandler(int delay,int inteval)
    13     {
    14         this->delay=delay;
    15         this->inteval=inteval;
    16     }
    17 
    18     int open()    //注册定时器
    19     {
    20         ACE_Time_Value delaytime(inteval);
    21         ACE_Time_Value intevaltime(inteval);
    22         timerid = reactor()->schedule_timer(this,
    23             0,    //传递handle_timeout给的参数
    24             delaytime,
    25             intevaltime);
    26         return timerid;
    27     }
    28 
    29     int close()    //取消定时器
    30     {
    31         return reactor()->cancel_timer(timerid);
    32     }
    33 
    34     //定时器回调函数
    35     int handle_timeout (const ACE_Time_Value &current_time,
    36         const void * = 0)
    37     {
    38         time_t epoch = ((timespec_t)current_time).tv_sec;
    39         ACE_DEBUG ((LM_INFO,
    40             ACE_TEXT ("handle_timeout: %s
    "),
    41             ACE_OS::ctime (&epoch)));
    42         return 0;
    43     }
    44 };
    45 
    46 int main(int argc, char *argv[]) 
    47 {
    48     MyTimerHandler * timer = new MyTimerHandler (3,5);
    49     timer->reactor(ACE_Reactor::instance());
    50     timer->open();
    51 
    52     for(int i=0;i<2;i++)    //触发次handle_timeout事件
    53     {
    54         ACE_OS::printf("
    %d
    ",i);
    55         ACE_Reactor::instance()->handle_events();
    56     }
    57 
    58     timer->close();
    59     ACE_OS::printf("cancel timer");
    60     while(true)
    61         ACE_Reactor::instance()->handle_events();
    62     return 0; 
    63 }

    代码功能比较简单,这里就不多做介绍了。

  • 相关阅读:
    随笔--摘录
    在windows+Linux环境下搭建Hadoop集群
    大数据 hadoop 环境搭建
    react-native 学习 ----- React Navigation
    android开发中关于继承activity类中方法的调用
    linux下 bin和sbin的区别
    inux中bin与sbin目录的作用及区别介绍
    hadoop 解除 "Name node is in safe mode"
    hadoop常用命令
    菜鸟使用MySQL存储过程and临时表,供新手参考,请高手斧正
  • 原文地址:https://www.cnblogs.com/shmilxu/p/4860530.html
Copyright © 2011-2022 走看看