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

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...