ACE_Reactor执行逻辑
(1)ACE_Reactor反应器作为全局基础服务,提供了事件回调的统一管理。
(3)一旦事件被注册到反应器,就意味着反应器拥有指向处理器的指针
(4)当事件发生时,反应器可以知道当前事件应该回调哪一个处理器
(5)当事件发生时,不同的事件会回调处理器的不同的handle_*方法
(7)handle_close在基类ACE_Event_Handler中的实现是什么也不做,仅仅是返回-1
ACE_Reacotr对处理器的释放
能够把堆对象交给ACE_Reactor,就说明对象已经经过了正常的创建和初始化。如果在创建和初始化阶段遇到了问题需要释放,那就是其他模式的职责,不归ACE_Reactor管。参考Acceptor-Connector模式对象的释放。
对于ACE_Reacotor反应器来说,处理器对象的释放都是通过执行处理器的handle_close方法来实现的(其他的模式可能会有自己的释放方式,这里不做讨论)
(1)如果服务处理器直接继承自ACE_Event_Handler,这个是不会释放处理器堆对象的,因为它的实现仅仅是返回-1就完事了
int ACE_Event_Handler::handle_input (ACE_HANDLE) { ACE_TRACE ("ACE_Event_Handler::handle_input"); return -1; }
template <typename PEER_STREAM,typename SYNCH_TRAITS> int ACE_Svc_Handler<PEER_STREAM,SYNCH_TRAITS>::handle_close (ACE_HANDLE,ACE_Reactor_Mask) { ACE_TRACE ("ACE_Svc_Handler<PEER_STREAM,SYNCH_TRAITS>::handle_close"); if (this->reference_counting_policy ().value () == ACE_Event_Handler::Reference_Counting_Policy::DISABLED) { this->destroy (); } return 0; }