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
handle_signal
handle_input
相關文章
- ACE_Reactor (V1.01)React
- ACE_Reactor模式(handle_input的工作)V1.0React模式
- 00、React系列之--React 系列概述React
- 00、React系列之 React 系列概述React
- Oracle系列Oracle
- Zuul系列Zuul
- 機器學習系列機器學習
- Retrofit系列
- RecyclerView系列View
- yolo系列YOLO
- Python 系列教程(入門系列已寫完)Python
- redis系列:哨兵Redis
- react系列教程React
- ElasticSearch系列2Elasticsearch
- [Git系列] 前言Git
- nginx系列-概念Nginx
- iptables系列五
- iptables系列二
- KendoUI系列:WindowUI
- KendoUI系列:PanelBarUI
- KendoUI系列:TabStripUI
- KendoUI系列:TreeViewUIView
- KendoUI系列:DropDownListUI
- Hudson教程系列
- jQuery系列:AjaxjQuery
- MongoDB系列二MongoDB
- 框架系列——MyBatis框架MyBatis
- 這是面試專題系列第四篇,Dubbo系列面試
- [Jira] Jira4系列、Jira6系列破解實戰
- Linux作業系統Redhat系列與Debian系列Linux作業系統Redhat
- rac維護工具集系列(三)--叢集層crsctl系列
- rac維護工具集系列(四)--叢集層OCR系列
- Flutter系列(四)——HelloWorldFlutter
- SpringCloud系列(一)SpringGCCloud
- WebShell系列(一)---XMLWebshellXML
- postman 系列視訊Postman
- TypeScript系列文件TypeScript
- docker系列(二):映象Docker