ACE_Reactor系列

前端之家收集整理的这篇文章主要介绍了ACE_Reactor系列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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_timeout

ACE定时器

ACE_Reactor实现计时器

handle_signal

ACE_Reactor实现运行时接收键盘输入

handle_input

原文链接:https://www.f2er.com/react/307130.html

猜你在找的React相关文章