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
相關文章
- Oracle系列Oracle
- yolo系列YOLO
- DeepLab系列
- DataX系列
- Ribbon系列
- Feign系列
- nacos系列
- Zuul系列Zuul
- redis系列:哨兵Redis
- react系列教程React
- ZooKeeper系列(三)
- ZooKeeper系列(四)
- Git 系列文章Git
- leetcode Sum系列LeetCode
- SpringCloud系列(一)SpringGCCloud
- nginx系列-概念Nginx
- ElasticSearch系列2Elasticsearch
- webpack系列-loaderWeb
- TypeScript系列文件TypeScript
- 框架系列——MyBatis框架MyBatis
- Flutter | Slivers 系列Flutter
- qemu逃逸系列
- [Git系列] 前言Git
- 《Dubbo系列一些好用的功能》不看後悔系列
- 設計模式系列設計模式
- 癌症免疫系列(6)
- web系列之AjaxWeb
- SpringSession系列-整合SpringBootGseSessionSpring Boot
- PHP 陣列系列PHP陣列
- shell入門系列
- webpack系列-優化Web優化
- redis系列:叢集Redis
- WCF系列教程地址
- 微服務系列教程微服務
- JS系列好文收集JS
- PWN系列-初探IO
- 修改圖表系列
- [系列] Go - chan 通道Go
- Mysql備份系列MySql