• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Focus on ACE

            訂閱 ace-china
            電子郵件:
            瀏覽存于 groups.google.com 上的所有帖子

            C++博客 首頁 新隨筆 聯系 聚合 管理
              64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks

            ACE小技巧:在ACE_Acceptor框架中,自定義服務處理器的創建

            Stone Jiang

            ACE_Acceptor框架使對新連接的偵聽變得容易,也使創建和激活新連接的ACE_Svc_Handler的派生類變得容易。之前我們已經了解了ACE_Svc_Handle::open()掛勾函數和服務處理器

            初始化時它所扮演的角色。本文我們回退幾步,來了解服務處理器是如何實例化的以及我們如何自定義它的行為。

            再看看ACE_Acceptor類,它是一個模板類,第一個模板參數ACE_Accetpor是代表與服務建立連接的處理器。當新的連接建立時,ACE_Acceptor調用make_svc_handler()掛勾函數來

            實際創建的新建服務處理器對象。ACE_Acceptor::make_svc_handler()的實現如下:

            template? < class ?SVC_HANDLE,ACE_PEER_ACCEPTOR_1 >
            int
            ACE_Acceptor
            < SVC_HANDLE,?ACE_PEER_ACCEPTOR_2 > ::make_svc_handler(SVC_HANDLE *& ?sh)
            {
            ??ACE_TRACE?(
            " ACE_Acceptor<SVC_HANDLER,?ACE_PEER_ACCEPTOR_2>::make_svc_handler " );?? if ?(sh? == ? 0 )
            ????ACE_NEW_RETURN?(sh,
            ????????????????????SVC_HANDLER,
            ????????????????????
            - 1 );?? // ?Set?the?reactor?of?the?newly?created?<SVC_HANDLER>?to?the?same
            ??
            // ?reactor?that?this?<ACE_Acceptor>?is?using.
            ??sh -> reactor?( this -> reactor?());
            ??
            return ? 0 ;

            }

            ?

            默認的實現包括了兩步基本操作:
            1.? 獲得一個新的SVC_HANLDER對象, 這里是使用的new運算符分配的。
            2.? 設置新的服務處理器的reactor指針為ACE_Accetpor使用的reactor的。

            然而,如果應用程序需要通過其它方式獲得SVC_HANDLER對象,而不是通過默認的構造函數那種動態分配,這又該怎么辦呢?舉例來說,我們可能需要:
            ?. 從一個預分配的池中獲得SVC_HANDLER對象;
            ?. 為新創建的SVC_HANDLER傳入一些額外的信息
            ?. 使用單體的SVC_HANDLER

            上面這些情形,我們都可以自定義make_svc_handler()掛勾函數來實現必要的行為。例如,假定我們新的處理器需要擁有一個處理所有對所有接收到的消息進行集中處理的中心處理

            器。這個中心處理器我們用類Processor表示。我們需要每個服務處理器都擁有一個指向中心處理器的指針,而不是使Processor成為一個全局訪問的指針(使用全局變量的種種弊端

            本文不作詳述)。我們的解決辦法是: 從ACE_Accetor派生一個新類,這個新類擁有Processor的指針作成員,并且,在創建新和服務處理器(Service)的時候,把這個 Processor的

            指針作參數傳進去。

            新的acceptor類可以這樣定義:

            class ?My_Acceptor?:? public ?ACE_Acceptor < Service,?ACE_SOCK_ACCEPTOR >
            {
            public :
            ??My_Acceptor?(Processor?
            * processor)?:?processor_?(processor)? {?} ;
            ??
            ??
            int ?make_svc_handler?(Service? *& sh)
            ????
            {
            ??????
            if ?(sh? == ? 0 )
            ????????ACE_NEW_RETURN?(sh,
            ????????????????????????Service?(
            this -> processor_),
            ????????????????????????
            - 1 );?????? // ?Set?the?reactor?of?the?newly?created?<SVC_HANDLER>?to?the?same
            ??????
            // ??reactor?that?this?<ACE_Acceptor>?is?using.
            ??????sh -> reactor?( this -> reactor?());
            ??????
            return ? 0 ;
            ????}


            private :
            ??Processor?
            * processor_;
            }

            ?

            就這樣,現在,當My_Acceptor接受新連接的時候,make_svc_handler()掛勾函數分配一個新的處理器(Service),并把Processor*作為參數傳進去。需要注意的事,盡管這里使用

            的是這一個構造函數Service(Processor*)。我們仍需求為Service類定義默認的構造函數,以滿足模板類ACE_Acceptor的需要。

            ?

            posted on 2006-08-30 14:11 Stone Jiang 閱讀(3798) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            国产精品99久久久久久董美香| 久久99久久成人免费播放| 国产—久久香蕉国产线看观看| 久久99国产精一区二区三区| 国产ww久久久久久久久久| 99久久精品九九亚洲精品| 日产精品久久久久久久| 亚洲av成人无码久久精品| 久久久精品一区二区三区| 99久久香蕉国产线看观香| 人妻精品久久无码区| 久久久久国产精品嫩草影院| 亚洲精品白浆高清久久久久久| 欧洲精品久久久av无码电影| 久久996热精品xxxx| 亚洲AV无码成人网站久久精品大| 久久99精品国产麻豆宅宅| 一本久道久久综合狠狠躁AV| 99精品久久久久久久婷婷| 亚洲中文字幕无码久久综合网| 精品久久久久国产免费| 麻豆成人久久精品二区三区免费| 狠狠精品干练久久久无码中文字幕| 狠狠色噜噜色狠狠狠综合久久| 久久久久久噜噜精品免费直播| 久久影院午夜理论片无码| 久久精品国产免费一区| AV无码久久久久不卡蜜桃| 久久影视综合亚洲| 久久久无码精品亚洲日韩软件| 99re久久精品国产首页2020| 国产精品久久久久久搜索| 18岁日韩内射颜射午夜久久成人 | 久久久精品人妻无码专区不卡| 久久天天躁狠狠躁夜夜网站 | 成人国内精品久久久久影院| 精品一二三区久久aaa片| 久久天天躁狠狠躁夜夜躁2014 | 四虎国产精品成人免费久久| 一级做a爰片久久毛片毛片| 日韩影院久久|