ACE_Reactor系列
发布时间:2020-12-15 04:39:09 所属栏目:百科 来源:网络整理
导读:ACE_Reactor执行逻辑 (1)ACE_Reactor反应器作为全局基础服务,提供了事件回调的统一管理。 (2)一般在处理类的构造函数里注册一个事件到反应器,或者由其他的模式显示调用反应器的注册函数来注册事件。 (3)一旦事件被注册到反应器,就意味着反应器拥有
ACE_Reactor执行逻辑
(1)ACE_Reactor反应器作为全局基础服务,提供了事件回调的统一管理。
(2)一般在处理类的构造函数里注册一个事件到反应器,或者由其他的模式显示调用反应器的注册函数来注册事件。
(3)一旦事件被注册到反应器,就意味着反应器拥有指向处理器的指针
(4)当事件发生时,反应器可以知道当前事件应该回调哪一个处理器
(5)当事件发生时,不同的事件会回调处理器的不同的handle_*方法
(6)执行handle_*的时候如果返回了-1,则会自动执行处理器的handle_close;处理器的remove_handler在被调用的时候也会执行handle_close
(7)handle_close在基类ACE_Event_Handler中的实现是什么也不做,仅仅是返回-1
ACE_Reacotr对处理器的释放
能够把堆对象交给ACE_Reactor,就说明对象已经经过了正常的创建和初始化。如果在创建和初始化阶段遇到了问题需要释放,那就是其他模式的职责,不归ACE_Reactor管。参考Acceptor-Connector模式对象的释放。
对于ACE_Reacotor反应器来说,处理器对象的释放都是通过执行处理器的handle_close方法来实现的(其他的模式可能会有自己的释放方式,这里不做讨论)
由于处理器自己的handle_close方法可能使用了父类的,也可能自己重写了。所以要分类讨论:
(1)如果服务处理器直接继承自ACE_Event_Handler,这个是不会释放处理器堆对象的,因为它的实现仅仅是返回-1就完事了
int ACE_Event_Handler::handle_input (ACE_HANDLE) { ACE_TRACE ("ACE_Event_Handler::handle_input"); return -1; }
(2)服务处理器继承自ACE_Svc_Handler(推荐),这个类自己重写了handle_close方法,主要动作就是执行自己的destroy方法,而这个方法的动作就是delete this
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; } handle_timeoutACE定时器 ACE_Reactor实现计时器 handle_signalACE_Reactor实现运行时接收键盘输入 handle_input
ACE_Reactor模式(handle_input handle_output读写完成时间的处理)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |