定时器的实现
通过Reactor机制,还可以很容易的实现定时器的功能,使用方式如下。
-
编写一个事件反应器,重载handle_timeout()方法,该方法是定时器的触发时间到时,会自动触发该方法。
-
通过Reactor的schedule_timer()方法注册定时器。
-
启动reacotr的handle_events()事件分发循环。
-
当不想使用定时器时,可以通过Reactor的cancel_timer()方法注销定时器。
下面的代码简单的实现了一个定时器,并具有基本的开启,关闭功能。
#include <ace/OS.h>
#include <ace/Reactor.h>
class MyTimerHandler : public ACE_Event_Handler
{
private:
int inteval; //执行时间间隔
int delay; //延迟执行时间
int timerid;
public:
MyTimerHandler(int delay,int inteval)
{
this->delay=delay;
this->inteval=inteval;
}
int open() //注册定时器
{
ACE_Time_Value delaytime(inteval);
ACE_Time_Value intevaltime(inteval);
timerid = reactor()->schedule_timer(this,
0, //传递handle_timeout给的参数
delaytime,
intevaltime);
return timerid;
}
int close() //取消定时器
{
return reactor()->cancel_timer(timerid);
}
//定时器回调函数
int handle_timeout (const ACE_Time_Value ¤t_time,
const void * = 0)
{
time_t epoch = ((timespec_t)current_time).tv_sec;
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("handle_timeout: %s\n"),
ACE_OS::ctime (&epoch)));
return 0;
}
};
int main(int argc, char *argv[])
{
MyTimerHandler * timer = new MyTimerHandler (3,5);
timer->reactor(ACE_Reactor::instance());
timer->open();
for(int i=0;i<2;i++) //触发次handle_timeout事件
{
ACE_OS::printf("\n%d\n",i);
ACE_Reactor::instance()->handle_events();
}
timer->close();
ACE_OS::printf("cancel timer");
while(true)
ACE_Reactor::instance()->handle_events();
return 0;
}
代码功能比较简单,这里就不多做介绍了。
分享到:
相关推荐
ACE proactor 与 Reactor 模式的详解
本篇文章是对ACE反应器(Reactor)模式进行了详细的分析介绍,需要的朋友参考下
ace reactor,单线程的多路分离工作模式。客户端,只需要简单的信号发送即可,代码略,见谅
一个ACE写的服务器端,可以连接多个用户,并处理其请求
但是你也可以选择自己的反应器,这是因为ACE使用了Bridge模式(使用两个不同的类:一个是编程接口,另一个是实现,第一个类会把各个操作传给第二个类)。例如使用线程池反应器实现:ACE_TP_Reactor* tp_reactor = ...
用VS2005编写的ObjectArx永久反应器例子,将反应器加入到模型空间,程序中有五条直线,拖动一根直线,其他直线也相应的变化。保存DWG图后,再次打开后可继续使用反应器。
里面的内容出自一个人的博客,是相关ACE方面对Reactor的运用,本人刚学习,所有上传保存之。
Recycle reactor(循环反应器)
本人学习ACE 时候写的关于两种通信方式的实例代码,我把三个连写都写在了一个文件,根据需要注释掉其他的就行。 ACE用于开发通信程序非常方便,尤其相对于WinSock 来说,可以省很多代码,普通程序员也更容易理解
Reactor模式和NIO Java的NIO为reactor模式提供了实现的基础机制,它的Selector当发现某个channel有数据时,会通过SlectorKey来告知我们,在此我们实现事件和handler的绑定
c++高并发模式的reactor模式,其主要作用就是在接收信息之后在线程池中进行选择空闲线程进行处理
ACE 入门,ACE中文文档,ACE_Task框架,ACE的框架及其核心,ACE反应器(Reactor)模式,ACE线程管理机制,ACE通用服务端框架,ACE通用客户端框架,ACE中TCP通信
reactor-netty, TCP/HTTP/UDP 客户机/服务器,带有联网的反应器 反应器联网 http://projectreactor.io/docs/netty/release/api/在软件许可证 2.0许可,,,。
学习ACE Reactor的好资料, 介绍了开源分布式开源代码ACE中Reactor的使用方法。
Easy-Reactor是一个基于Reactor模式的Linux C++网络服务器框架,支持多线程TCP服务器,单线程TCP服务器,单线程UDP服务器等形式,可以让使用者完全专注于业务,快速开发出一个高效的服务器应用。 在工作中开发基础...
主要介绍了Java Reactor反应器模式使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
reactor模式详细描述。由ACE作者亲自写作!
第 7 章 ACE 反应器(Reactor)的设计和使用:用于事件多路分离的面向对象框架 第 8 章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式 第 9 章 接受器-连接器(Acceptor-Connector):...
基于epoll简单的实现一个基本的reactor模式,本例程仅供参考和学习