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\n"),
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("\n%d\n",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 }

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

时间: 2024-10-04 09:36:00

ACE反应器(Reactor)模式(4)的相关文章

ACE反应器(Reactor)模式(1)

转载于:http://www.cnblogs.com/TianFang/archive/2006/12/13/591332.html 1.ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞.所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止.而对于非阻塞状态, 如果没有东西可读, 或者不可写

ACE反应器(Reactor)模式(2)

转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595808.html 在Socket编程中,常见的事件就是"读就绪","写就绪",通过对这两个事件的捕获分发,可以实现Socket中的异步操作. Socket编程中的事件处理器 在前面我们已经介绍过,在ACE反应器框架中,任何都必须派生自ACE_Event_Handler类,并通过重载其相应会调事件处理函数来实现相应的回调处理的.在Socket编程中,我们

ACE反应器(Reactor)模式(3)

转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595938.html 在服务器端使用Reactor框架 使用Reactor框架的服务器端结构如下: 服务器端注册两种事件处理器,ClientAcceptor和ClientService ,ClientService类负责和客户端的通信,每一个ClientService对象对应一个客户端的Socket连接. ClientAcceptor专门负责被动接受客户端的连接,并创建ClientSe

ACE - Reactor模式源码剖析及具体实现(大量源码慎入)

原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于Reactor框架的服务器. 首先回顾下Reactor模式和Preactor模式. Reactor模式: Reactor模式实现非常简单,使用同步IO模型,即业务线程处理数据需要主动等待或询问,主要特点是利用epoll监听listen描述符是否有响应,及时将客户连接信息放于一个队列,epoll和队列

什么是Reactor模式,或者叫反应器模式

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解. 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请

Reactor模式,或者叫反应器模式 - 为什么用多路io复用提供吞吐量

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解. 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请

Reactor模式,或者叫反应器模式[转]

这个写的相当易懂, 再次感谢并分享,原地址: http://daimojingdeyu.iteye.com/blog/828696 Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的

Reactor模式(反应器模式)

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解. 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请

Reactor模式,或者叫反应器模式

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解. 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请