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

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

            1.1 創建主程序
            ??? 用Viusal Studio創建一空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, 以調試模式啟動
            1.2.3 C/C++設置
            1.2.3.1 Additional Include Directories /I[path]: $(ACE_ROOT);
            1.2.3.2 Code Generation: /MTd ;/MT 調試版選MTd,發行版選 MT
            1.2.3.3 Preprocessor:Preprocesor Definitions/D: WIN32;_DEBUG;_CONSOLE;
            ?????????????? 這是調試版,發行版將_DEBUG改為NDEBUG
            1.2.4 鏈接設置
            1.2.4.1 Input: Additinal Dependencise: ACE(d).lib,調試版選aced.lib,
            ?????????????????????????????????????????????????? 發行版選ace.lib
            1.2.4.2 System: SubSystem /subsystem: Console ;?? (/SUBSYSTEM:CONSOLE)

            主程序代碼


            ?

            // @file:??GLIVR86ServiceD.cpp?
            // @description:??IVR?86業務服務主程序入口
            // @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. 創建被加載的服務的動態鏈接庫
            2.1 用Visual Studio創建一個新的項目GLIVR86Service,我們依然從空白的Win32 Console開

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

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

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

            ?

            // @file:?ServiceFactory.h
            // @description:??IVR?86業務服務
            // @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 "
            // 實現服務工廠
            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. 運行結果

            ?

            posted on 2006-07-04 13:26 Stone Jiang 閱讀(3346) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            亚洲国产天堂久久综合网站 | 久久久中文字幕| av无码久久久久久不卡网站| 久久精品国产亚洲AV大全| AV无码久久久久不卡蜜桃| 青青热久久国产久精品| 亚洲精品tv久久久久久久久 | 久久精品九九亚洲精品天堂| 精品久久久久久国产三级| 久久精品成人欧美大片| 国产成人无码精品久久久免费 | 久久精品免费一区二区| 日韩精品久久久久久| 久久亚洲AV无码精品色午夜 | 囯产极品美女高潮无套久久久 | 国产精品久久久久久吹潮| 久久免费观看视频| 91精品国产乱码久久久久久| 中文字幕亚洲综合久久菠萝蜜| 91久久精品无码一区二区毛片| 亚洲国产另类久久久精品| 亚洲国产精品成人久久蜜臀| 91麻豆精品国产91久久久久久| 无码精品久久久久久人妻中字| 热RE99久久精品国产66热| 精品国产综合区久久久久久| 久久91综合国产91久久精品| 久久精品九九亚洲精品| 亚洲精品美女久久777777| 亚洲乱码日产精品a级毛片久久| 久久福利片| 久久久久一本毛久久久| 久久国产乱子伦精品免费午夜| 免费观看久久精彩视频| 久久综合九色综合欧美狠狠| 久久精品国产久精国产思思| 久久无码人妻一区二区三区午夜 | 国内精品久久久久久久涩爱| 99久久国产主播综合精品| 日韩一区二区久久久久久| 亚洲国产精品久久|