最后来看一下信号量事件处理器的删除函数—remove_handler,如代码清单2-50所示。代码清单2-50 remove_handler函数----------------------------------------------- Sig_Handler.cppintACE_Sig_Handler::remo...
尽管信号量事件的调度没有出现在ACE_Select_Reactor_T类的dispatch函数中,但是该函数还是对信号量事件做了一些处理。dispatch函数中关于信号量的处理部分如代码清单2-49所示。代码清单2-49 dispatch函数------...
由于信号量事件完全区别于I/O事件,所以I/O事件的调度方法不能用于调度信号量事件。要处理信号量事件,框架必须先封装操作系统用于处理信号量事件的原始数据结构和接口。这一工作由ACE_Sig_Set类和ACE_Sig_Actio...
在Linux操作系统中,信号量事件和I/O事件的处理方式是完全不同的:I/O事件一般使用分离函数等待事件,然后对描述符进行读写等操作;信号量事件则通过应用程序向操作系统注册信号处理函数来完成。信号量事件调度不...
如果想要删除某个事件,那么可以调用remove_handler函数。同样remove_handler函数也有几个重载版本,我们分析其中的一个,如代码清单2-40所示。代码清单2-40 remove_handler函数------------------------------...
熟悉网络编程或者了解select分离函数用法的读者都知道,对事件的调度其实是一个无限循环,每次循环都调用select函数等待和分离事件,一旦select函数有事件返回,那么针对返回的描述符进行I/O处理。Reactor框架的...
要使用Reactor框架来调度应用程序的I/O事件,应用程序必须将I/O事件注册到框架中,这不仅需要将一个具体的事件处理器放到事件处理器仓库中,还必须将事件处理器的描述符和事件处理器处理的事件加入到框架的调度集...
Reactor管理器对I/O事件的调度分为两步,先是通过操作系统提供的select函数将事件分离,然后根据应用程序注册的事件处理器进行调度。I/O事件处理器和I/O描述符是一一对应的。要满足应用程序注册、删除和调度事件...
bit_ops函数是调度集操作函数,其定义如代码清单2-21、代码清单2-22所示,它的功能是根据事件类型在调度集中对描述符进行GET、ADD、SET、DELETE操作。我们先来看函数的第一部分—初始化。代码清单2-21 bit_ops函...
在Linux下,一个文件描述符可以对应3种不同的I/O事件:READ、WRITE和EXCEPT,select函数可以同时分离出这些事件。为了表达这种关系,ACE设计了ACE_Select_Reactor_ Handle_Set类,如代码清单2-19所示,其中ACE_...
在分析框架对I/O事件的调度之前,我们先来复习一下select函数是如何来分离事件的。select函数的原型[19]为:int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const s...
ACE_Select_Reactor_T类是Reactor管理器的一种实现,它以操作系统的select函数作为事件的分离器,它是一个模板类,模板参数用于指明当前使用的令牌类型。ACE_Select_Reactor_T类的数据成员非常少,其中deactivat...
ACE_Select_Reactor_Impl仍然是一个抽象类,它为基于select调用的分离函数提供统一的接口,它和其他类的结构关系可参考图2-2。如代码清单2-18所示,ACE_Select_Reactor_Impl类有着丰富的数据成员,考虑到代码显示...
ACE_Reactor_Impl是一个抽象类,它的结构可以参考图2-2,其主要作用是为Bridge设计模式中的Implementor提供统一的接口
ACE_Reactor类是Reactor管理器面向应用程序的接口。它使用Facade设计模式来简化应用程序对Reactor框架的访问,同时又采用Bridge设计模式来实现跨平台的功能。ACE_Reactor是一个接口转发类,除了构造和析构函数,...
框架管理器是整个框架的核心。一方面,它需要向应用程序提供接口,这样应用程序才能访问框架;另一方面,它又需要管理框架内的所有事件,完成框架提供的领域的功能。ACE的Reactor框架使用ACE_Reactor类作为框架管...
既然使用Reactor框架,就需要遵守Reactor框架的一些约束。q 应用程序的事件处理器必须继承ACE_Event_Handler接口,然后注册到框架中,才能被框架调度。q ACE_Event_Handler接口的模板函数会被Reactor管理器调用...
ACE_Event_Handler接口的构造函数,如代码清单2-12所示。代码清单2-12 构造函数--------------------------------------------- Event_Handler.cppACE_Event_Handler::ACE_Event_Handler (ACE_Reactor *r, ...
事件处理器接口定义了用户需要遵循的框架中的约束,是框架调度过程中不变的部分,是框架设计中非常重要的元素。事件处理器接口中的方法直接定义了框架所提供的功能,由于框架是面向某一应用领域的,所以这些方法...
最后来看main函数,如代码清单2-9所示。代码清单2-9 main函数---------------------------------------------------- server.cppACE_INT32 main( ACE_INT32 argc, char **argv ){ ACE_UINT16 port = ...