• <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++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks

            ACE小技巧:在ACE_Acceptor框架中,自定義服務(wù)處理器的創(chuàng)建

            Stone Jiang

            ACE_Acceptor框架使對(duì)新連接的偵聽(tīng)變得容易,也使創(chuàng)建和激活新連接的ACE_Svc_Handler的派生類(lèi)變得容易。之前我們已經(jīng)了解了ACE_Svc_Handle::open()掛勾函數(shù)和服務(wù)處理器

            初始化時(shí)它所扮演的角色。本文我們回退幾步,來(lái)了解服務(wù)處理器是如何實(shí)例化的以及我們?nèi)绾巫远x它的行為。

            再看看ACE_Acceptor類(lèi),它是一個(gè)模板類(lèi),第一個(gè)模板參數(shù)ACE_Accetpor是代表與服務(wù)建立連接的處理器。當(dāng)新的連接建立時(shí),ACE_Acceptor調(diào)用make_svc_handler()掛勾函數(shù)來(lái)

            實(shí)際創(chuàng)建的新建服務(wù)處理器對(duì)象。ACE_Acceptor::make_svc_handler()的實(shí)現(xiàn)如下:

            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 ;

            }

            ?

            默認(rèn)的實(shí)現(xiàn)包括了兩步基本操作:
            1.? 獲得一個(gè)新的SVC_HANLDER對(duì)象, 這里是使用的new運(yùn)算符分配的。
            2.? 設(shè)置新的服務(wù)處理器的reactor指針為ACE_Accetpor使用的reactor的。

            然而,如果應(yīng)用程序需要通過(guò)其它方式獲得SVC_HANDLER對(duì)象,而不是通過(guò)默認(rèn)的構(gòu)造函數(shù)那種動(dòng)態(tài)分配,這又該怎么辦呢?舉例來(lái)說(shuō),我們可能需要:
            ?. 從一個(gè)預(yù)分配的池中獲得SVC_HANDLER對(duì)象;
            ?. 為新創(chuàng)建的SVC_HANDLER傳入一些額外的信息
            ?. 使用單體的SVC_HANDLER

            上面這些情形,我們都可以自定義make_svc_handler()掛勾函數(shù)來(lái)實(shí)現(xiàn)必要的行為。例如,假定我們新的處理器需要擁有一個(gè)處理所有對(duì)所有接收到的消息進(jìn)行集中處理的中心處理

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

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

            指針作參數(shù)傳進(jìn)去。

            新的acceptor類(lèi)可以這樣定義:

            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_;
            }

            ?

            就這樣,現(xiàn)在,當(dāng)My_Acceptor接受新連接的時(shí)候,make_svc_handler()掛勾函數(shù)分配一個(gè)新的處理器(Service),并把Processor*作為參數(shù)傳進(jìn)去。需要注意的事,盡管這里使用

            的是這一個(gè)構(gòu)造函數(shù)Service(Processor*)。我們?nèi)孕枨鬄镾ervice類(lèi)定義默認(rèn)的構(gòu)造函數(shù),以滿(mǎn)足模板類(lèi)ACE_Acceptor的需要。

            ?

            posted on 2006-08-30 14:11 Stone Jiang 閱讀(3790) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): ACE
            久久精品国产99久久久古代| 99精品伊人久久久大香线蕉| 中文字幕乱码久久午夜| 久久久久亚洲AV无码麻豆| 精品九九久久国内精品| 亚洲国产成人久久综合区| 亚洲中文字幕无码久久2020| 久久精品一区二区国产| 精品久久久久久久久免费影院| 久久夜色精品国产噜噜亚洲AV| 精品国产热久久久福利| 久久综合综合久久综合| 精品久久久久久久久久久久久久久| 99久久国产亚洲综合精品| 久久久精品免费国产四虎| 久久久国产精华液| 久久成人18免费网站| 精品午夜久久福利大片| 狠狠色丁香久久婷婷综合| 久久久久成人精品无码| 久久国产高清字幕中文| 久久亚洲精精品中文字幕| 亚洲欧洲中文日韩久久AV乱码| 日本精品久久久久中文字幕8| 婷婷久久久亚洲欧洲日产国码AV| 久久久久无码精品| 99久久精品国产毛片| 国产精品一久久香蕉产线看 | 久久黄色视频| 97久久久精品综合88久久| 少妇高潮惨叫久久久久久| 97香蕉久久夜色精品国产| 久久99热这里只有精品66| 婷婷久久精品国产| 亚洲精品成人久久久| 亚洲国产精品狼友中文久久久| 精品国产一区二区三区久久蜜臀| 久久精品国产精品青草app| 久久精品国产免费| 国产99久久久国产精品~~牛| 久久精品国产影库免费看|