• <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>

            一動(dòng)不如一靜

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              20 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

            ?

            /* *******************************************************************
            *?Copyright?(c)?2006,study-record?home
            *?All?rights?reservered.
            *
            *?文件名稱(chēng)?:?littersize.cpp?
            *?摘????要?:?這個(gè)例子主要是用來(lái)驗(yàn)證這樣一個(gè)問(wèn)題。當(dāng)我們程序中有n個(gè)reactor的時(shí)候,是否就意味著我們支持n*FD_SETSIZE連接.
            ???????????????????為了驗(yàn)證這個(gè)問(wèn)題,我們傳遞一個(gè)大小為2的值給ACE_Select_Reactor的構(gòu)造函數(shù)。看是否是只支持2個(gè)連接?
            ???????????????????驗(yàn)證結(jié)果表明:在本例子中,由于acceptor注冊(cè)用掉了一個(gè),而我們給定的最大的handle數(shù)為2,所以只能接受一個(gè)連接。
            ???????????????????在命令行下輸入:telnet?127.0.0.1?1234?,在我們第二次輸入時(shí),
            ???????????????????在調(diào)用int?nRet?=?m_Reactor->register_handler(pEvent,?ACE_Event_Handler::READ_MASK);的時(shí)候一定會(huì)失敗。
            ???????????????????但是在命令行下輸入:telnet?127.0.0.1?2345?,在我們第三次輸入的時(shí)候,調(diào)用register_handler的時(shí)候才會(huì)失敗
            ???????????????????但是這樣的一段代碼存在高cpu的問(wèn)題,也就是當(dāng)把客戶(hù)端關(guān)調(diào)的時(shí)候,cpu占用率會(huì)很高?想想看,為什么呢?
            ???????????????????本代碼只是為了驗(yàn)證一些東西,有很多不合理的地方,請(qǐng)務(wù)仿照。
            *
            *?當(dāng)前版本?:?1.0
            *?作????者?:?study-record???2007-2-22
            *
            ********************************************************************
            */


            #include?
            " ace/Thread_Manager.h "
            #include?
            " ace/Select_Reactor.h "
            #include?
            " ace/Reactor.h "
            #include?
            " ace/Event_Handler.h "
            #include?
            " ace/SOCK_Acceptor.h "
            #include?
            " ace/SOCK_Stream.h "
            #include?
            " ace/INET_Addr.h "

            const ?size_t?g_unOneMaxHandle? = ? 2 ;
            const ?size_t?g_unTwoMaxhandle? = ? 4 ;


            static ?ACE_THR_FUNC_RETURN?event_loop_one?( void ? * arg)?
            {
            ????ACE_Reactor?
            * reacator? = ?static_cast < ACE_Reactor? *> (arg);

            ????reacator
            -> owner(ACE_Thread::self());
            ????reacator
            -> run_reactor_event_loop();
            ????
            return ? 0 ;

            }

            static ?ACE_THR_FUNC_RETURN?event_loop_two?( void ? * arg)?
            {
            ????ACE_Reactor?
            * reacator? = ?static_cast < ACE_Reactor? *> (arg);

            ????reacator
            -> owner(ACE_Thread::self());
            ????reacator
            -> run_reactor_event_loop();
            ????
            return ? 0 ;
            }


            class ?TestHandleEvent:? public ?ACE_Event_Handler
            {
            public :
            ????
            virtual ? int ?handle_input?(ACE_HANDLE?fd? = ?ACE_INVALID_HANDLE)
            ????
            {
            ????????ACE_DEBUG((LM_DEBUG,?
            " TestHandleEvent::handle_input\n " ));
            ????????
            return ? 0 ;
            ????}
            ;
            ????
            virtual ? int ?handle_close?(ACE_HANDLE?handle,?ACE_Reactor_Mask?close_mask)
            ????
            {
            ????????
            ????????ACE_DEBUG((LM_DEBUG,?
            " TestHandleEvent::handle_close\n " ));
            ????????delete?
            this ;
            ????????
            return ? 0 ;

            ????}
            ;
            ????ACE_HANDLE?get_handle(
            void )? const ?
            ????
            {
            ????????
            return ?peer.get_handle();
            ????}


            public :
            ????ACE_SOCK_Stream?peer;

            }
            ;
            class ?TestAcceptor?:? public ?ACE_Event_Handler
            {
            public :
            ????
            virtual ? int ?handle_input?(ACE_HANDLE?fd? = ?ACE_INVALID_HANDLE)
            ????
            {
            ????????
            ????????TestHandleEvent
            * ?pEvent? = ? new ?TestHandleEvent;
            ????????acceptor.accept(pEvent
            -> peer);
            ????????
            int ?nRet? = ?m_Reactor -> register_handler(pEvent,?ACE_Event_Handler::READ_MASK);
            ????????
            if ?( - 1 ? == ?nRet)
            ????????
            {
            ????????????delete?pEvent;
            ????????????pEvent?
            = ?NULL;
            ????????}


            ????????
            return ? 0 ;
            ????}
            ;
            ????
            virtual ? int ?handle_close?(ACE_HANDLE?handle,?ACE_Reactor_Mask?close_mask)
            ????
            {
            ????????ACE_DEBUG((LM_DEBUG,?
            " TestAcceptor::handle_close\n " ));
            ????????acceptor.close();
            ????????delete?
            this ;

            ????????
            return ? 0 ;

            ????}
            ;
            ????
            ????
            ????TestAcceptor(ACE_Reactor
            * ?reactor):m_Reactor(reactor)
            ????
            {
            ????????
            ????}
            ;
            ????
            int ?open(unsigned? short ?usport)
            ????
            {
            ????????ACE_INET_Addr?addr(usport);
            ????????acceptor.open(addr);
            ????????
            return ?m_Reactor -> register_handler( this ,?ACE_Event_Handler::ACCEPT_MASK);

            ????}
            ;
            ????ACE_HANDLE?get_handle(
            void )? const ?
            ????
            {
            ????????
            ????????
            return ?acceptor.get_handle();
            ????}

            public :
            ????ACE_SOCK_Acceptor?acceptor;
            ????ACE_Reactor
            * ?m_Reactor;

            }
            ;


            int ?main?( int ?argc,? char ? * argv[])
            {
            ????

            ????ACE_Select_Reactor?select_reactor_one(g_unOneMaxHandle,?
            0 ,? 0 ,? 0 ,? 1 );
            ????ACE_Reactor
            * ?reactor_one? = ? new ?ACE_Reactor( & select_reactor_one);

            ????ACE_Select_Reactor?select_reactor_two(g_unTwoMaxhandle,?
            0 ,? 0 ,? 0 ,? 1 );
            ????ACE_Reactor
            * ?reactor_two? = ? new ?ACE_Reactor( & select_reactor_two);

            ????TestAcceptor?test_acceptor(reactor_one);
            ????test_acceptor.open(
            1234 );

            ????TestAcceptor?test_acceptorw(reactor_two);
            ????test_acceptorw.open(
            2345 );
            ????
            ????
            ????ACE_Thread_Manager::instance()
            -> spawn(event_loop_one,?reactor_one);
            ????ACE_Thread_Manager::instance()
            -> spawn(event_loop_two,?reactor_two);

            ????
            return ?ACE_Thread_Manager::instance() -> wait();
            }
            posted on 2007-02-22 23:25 一動(dòng)不如一靜 閱讀(859) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): ACE
            国内精品伊人久久久影院| 国产色综合久久无码有码| 亚洲中文精品久久久久久不卡| 91精品久久久久久无码| 国产成人精品白浆久久69| 久久精品一区二区影院| 色综合久久久久| 国产综合成人久久大片91| 国产激情久久久久影院老熟女| AAA级久久久精品无码区| 久久国产精品国语对白| 亚洲伊人久久成综合人影院 | 精品国产综合区久久久久久| 午夜不卡888久久| 国产精品久久久久9999高清| 日韩精品久久久久久| 国产一区二区三精品久久久无广告| 日本精品久久久中文字幕| 精品久久国产一区二区三区香蕉| 欧美大战日韩91综合一区婷婷久久青草 | 一本大道久久香蕉成人网| 日产久久强奸免费的看| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久久久亚洲AV无码专区首JN| 久久久久香蕉视频| 亚洲国产成人久久一区WWW| 国产精品久久久久久久人人看| 久久亚洲sm情趣捆绑调教| 国产亚洲欧美成人久久片| 天天综合久久一二三区| 久久99久久99精品免视看动漫| 久久久久亚洲爆乳少妇无| 亚洲精品无码久久久影院相关影片| 91视频国产91久久久| 久久无码国产专区精品| 成人资源影音先锋久久资源网| 亚洲国产高清精品线久久 | 亚洲狠狠综合久久| 亚洲色欲久久久久综合网| 66精品综合久久久久久久| 久久人人爽人人爽人人片AV麻烦|