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

            Visual C++下ACE動態(tài)服務配置入門
            摘要:
            ?? 服務動態(tài)配置在編寫服務端應用在有很明顯的優(yōu)點,本文簡要介紹用visual C++ (7.1)
            編寫ACE動態(tài)服務的步驟。
            ?? 本文適用于ACE初學者。
            ??
            1. 主進程

            1.1 創(chuàng)建主程序
            ??? 用Viusal Studio創(chuàng)建一空Win32 Console項目,這里命名為GLIVR86ServiceD.注,這里
            D表示Daemon,不是Debug。表示我們以后會把這個項目改造為了NT_Service(以后介紹步驟.
            1.2 修改項目屬性 (Configuation Properties)
            1.2.1 為項目新增主文件 GLIVR86ServiceD.cpp,目的是為項目屬性中,增加C/C++選項
            1.2.1 General 修改程序輸出路徑$(OutDir)
            1.2.2.Debugging? Command Arguments: -d, 以調(diào)試模式啟動
            1.2.3 C/C++設置
            1.2.3.1 Additional Include Directories /I[path]: $(ACE_ROOT);
            1.2.3.2 Code Generation: /MTd ;/MT 調(diào)試版選MTd,發(fā)行版選 MT
            1.2.3.3 Preprocessor:Preprocesor Definitions/D: WIN32;_DEBUG;_CONSOLE;
            ?????????????? 這是調(diào)試版,發(fā)行版將_DEBUG改為NDEBUG
            1.2.4 鏈接設置
            1.2.4.1 Input: Additinal Dependencise: ACE(d).lib,調(diào)試版選aced.lib,
            ?????????????????????????????????????????????????? 發(fā)行版選ace.lib
            1.2.4.2 System: SubSystem /subsystem: Console ;?? (/SUBSYSTEM:CONSOLE)

            主程序代碼


            ?

            // @file:??GLIVR86ServiceD.cpp?
            // @description:??IVR?86業(yè)務服務主程序入口
            // @author:?jiangtao
            // @version:2.0.0

            #include?
            " stdafx.h "
            #include?
            < memory > ?? // ?使用?auto_ptr

            #include?
            " ACE/OS_NS_unistd.h "
            #include?
            " ACE/TP_Reactor.h "
            #include?
            " ACE/Reactor.h "
            #include?
            " ACE/Service_Config.h "
            #include?
            " ACE/Thread_Manager.h "

            // 線程池
            static ?ACE_THR_FUNC_RETURN?event_loop?( void ? * arg)?
            {
            ????ACE_DEBUG((LM_INFO,
            " (%P|%t),event_loop()\n " ));
            ????ACE_Reactor?
            * reactor? = ?static_cast < ACE_Reactor? *> ?(arg);

            ????reactor
            -> owner?(ACE_OS::thr_self?());
            ????reactor
            -> run_reactor_event_loop?();
            ????
            return ? 0 ;
            }


            int
            ACE_TMAIN?(
            int ?argc,?ACE_TCHAR? * argv[])
            {
            ??
            ????
            const ?size_t?N_THREADS? = ? 4 ;
            ????ACE_TP_Reactor?tp_reactor;
            ????ACE_Reactor?reactor?(
            & tp_reactor);
            ????auto_ptr
            < ACE_Reactor > ?delete_instance(ACE_Reactor::instance?( & reactor));
            ???
            ?????
            if ?(ACE_Service_Config::open?(argc,?argv)? == ? - 1 )
            ????????????ACE_ERROR_RETURN?((LM_ERROR,
            ????????????ACE_TEXT?(
            " %p\n " ),
            ????????????ACE_TEXT?(
            " open " )),
            ????????????
            1 );
            ???????
            ????ACE_Thread_Manager::instance?()
            -> spawn_n
            ?????????????????(N_THREADS,?event_loop,?ACE_Reactor::instance?());

            ????ACE_Thread_Manager::instance?()
            -> wait?();

            ????
            return ? 0 ;
            }


            2. 創(chuàng)建被加載的服務的動態(tài)鏈接庫
            2.1 用Visual Studio創(chuàng)建一個新的項目GLIVR86Service,我們依然從空白的Win32 Console開

            1.2.1 為項目新增主文件 GLIVR86Service.cpp,目的是為項目屬性中,增加C/C++選項
            1.2.1 General : Configration Type:改為 動態(tài)鏈接庫 Dynamic Library(DLL)
            1.2.3.1 Additional Include Directories /I[path]: $(ACE_ROOT);
            1.2.3.2 Code Generation: /MTd ;/MT 調(diào)試版選MTd,發(fā)行版選 MT
            1.2.3.3 Preprocessor:Preprocesor Definitions/D:
            ??????????????????????? WIN32;_DEBUG;_WINDOWS;ACE_BUILD_SVC_DLL
            ??????????????????????? 這是調(diào)試版,發(fā)行版將_DEBUG改為NDEBUG
            ??????? 這里,特別注意,要增加 ACE_BUILD_SVC_DLL宏。如果用generate_export_file.pl
            ??????? 生成自定義的export頭文件,這個宏也可以自定義
            ???????
            2.2.2 鏈接器設置
            2.2.2.1 Input: Additinal Dependencise: ACE(d).lib,調(diào)試版選aced.lib,
            ?????????????????????????????????????????????????? 發(fā)行版選ace.lib
            2.2.2.2 System: SubSystem /subsystem: Console ;?? (/SUBSYSTEM:CONSOLE)
            2.2.2.3 General ,Output file:
            ???????????????? ../GLIVR86ServiceD/GLIVR86ServiceD/GLIVR86ServiceD.dll
            ???
            ??????????????????? 這里填寫上GLIVR86ServiceD的路徑或環(huán)境變量Path中指
            ??????????????????? 示的路徑,這樣可以方便調(diào)試

            2.2.2.4 Adanced, Import Libaray:? $(OutDir)\GLIVR86ServiceD.lib
            ?????????????????????????????? 上面是調(diào)試版,發(fā)行版可以去掉后綴D,即
            ?????????????????????????????? $(OutDir)\GLIVR86Service.lib
            ??????????????????????????????
            3.服務的動態(tài)鏈接庫實現(xiàn)

            3.1 為項目增加兩個文件,分別聲明和實現(xiàn)服務類工廠
            //@file: ServiceFactory.h
            //@file: ServiceFactory.cpp
            代碼分別如下

            ?

            // @file:?ServiceFactory.h
            // @description:??IVR?86業(yè)務服務
            // @author:?jiangtao
            // @data:?2006-7-3
            // @version:1.0.0


            #ifndef?SERVICEFACTORY_H
            #define ?SERVICEFACTORY_H
            #include?
            " ACE/svc_export.h "
            #include?
            " ACE/Service_Config.h "
            #include?
            " ACE/Service_Object.h "

            // 聲明服務工廠
            ACE_SVC_FACTORY_DECLARE?(ServiceFactory_T)

            class ?ACE_Svc_Export?ServiceFactory_T?:? public ?ACE_Service_Object
            {
            public :
            ??
            /// ?Initializes?object?when?dynamic?linking?occurs.
            ?? virtual ? int ?init?( int ?argc,?ACE_TCHAR? * argv[]);

            ??
            /// ?Terminates?object?when?dynamic?unlinking?occurs.
            ?? virtual ? int ?fini?( void );

            ??
            /// ?Returns?information?on?a?service?object.
            ?? virtual ? int ?info?(ACE_TCHAR? ** info_string,?size_t?length? = ? 0 )? const ;

            };


            #endif ?/*?SERVICEFACTORY_H?*/




            /*******************************************************************/

            // @file:?ServiceFactory.cpp

            #include?
            " ServiceFactory.h "
            #include?
            " ACE/Log_Msg.h "
            // 實現(xiàn)服務工廠
            ACE_SVC_FACTORY_DEFINE?(ServiceFactory_T)

            int ?ServiceFactory_T::init( int ?argc,?ACE_TCHAR? * argv[])
            {
            ????ACE_DEBUG((LM_INFO,
            " (%P|%t)?服務初始化完成\n " ));
            ????
            return ? 0 ;
            }

            int ?ServiceFactory_T::info(ACE_TCHAR? ** strp,?size_t?length)? const
            {
            ????ACE_DEBUG((LM_INFO,
            " ServiceFactory_T::info()?\n " ));
            ????
            return ? 0 ;
            }

            int ?ServiceFactory_T::fini( void )
            {
            ????
            return ? 0 ;
            }


            5.服務配置文件svc.conf
            dynamic IVR86Service Service_Object * GLIVR86Service: _make_ServiceFactory_T() active
            ???
            6. 運行結(jié)果

            ?

            posted on 2006-07-04 13:26 Stone Jiang 閱讀(3367) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            99精品久久精品一区二区| 久久精品国产国产精品四凭| 久久精品国产精品亚洲精品| 亚洲国产精品无码久久久秋霞2 | 成人妇女免费播放久久久| 国产精品福利一区二区久久| 久久婷婷五月综合成人D啪| 伊人久久久AV老熟妇色| 国产成人精品久久亚洲高清不卡 | 亚洲性久久久影院| 精品国产91久久久久久久| 亚洲精品高清一二区久久| 狠狠狠色丁香婷婷综合久久五月| 久久亚洲精品国产亚洲老地址 | 久久无码人妻一区二区三区| 国产精品免费久久久久久久久| 国产激情久久久久久熟女老人| 久久久久99精品成人片三人毛片| 久久国产乱子伦免费精品| 色偷偷91久久综合噜噜噜噜| 日本一区精品久久久久影院| 日本人妻丰满熟妇久久久久久| 亚洲国产高清精品线久久| 99久久久久| 91久久香蕉国产熟女线看| 97热久久免费频精品99| 性做久久久久久久| 国产美女亚洲精品久久久综合 | 色偷偷888欧美精品久久久| 久久99精品久久久久久久不卡| 中文字幕久久波多野结衣av| 久久91精品国产91| 久久人做人爽一区二区三区 | 99精品久久精品| 99久久久国产精品免费无卡顿 | 热RE99久久精品国产66热| 久久精品三级视频| 麻豆久久久9性大片| 久久久久久国产精品无码下载| 97视频久久久| 色综合久久综合中文综合网|