• <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 閱讀(3359) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            久久国产精品无| 97香蕉久久夜色精品国产 | 亚洲国产精品无码久久久蜜芽| 久久精品中文字幕大胸| 精品永久久福利一区二区 | 久久青青草原精品国产软件| 7777精品伊人久久久大香线蕉 | 久久久久久a亚洲欧洲aⅴ| 久久国产成人精品国产成人亚洲| 久久精品日日躁夜夜躁欧美| 一级做a爰片久久毛片16| 久久婷婷国产剧情内射白浆| 51久久夜色精品国产| 久久这里只有精品18| 欧洲性大片xxxxx久久久| 夜夜亚洲天天久久| 99精品久久精品一区二区| 国产精品乱码久久久久久软件| 国产免费久久精品99久久| 精品综合久久久久久888蜜芽| 久久九九兔免费精品6| 久久www免费人成精品香蕉| 久久国产欧美日韩精品| 久久免费看黄a级毛片| 久久99国产精品成人欧美| 91久久精品国产成人久久| 国产精品一久久香蕉国产线看观看| 久久亚洲精品成人无码网站| 久久无码AV中文出轨人妻| 久久久受www免费人成| 国产免费福利体检区久久| 国产成人精品久久| 亚洲成色999久久网站| 久久精品中文字幕久久| 色诱久久久久综合网ywww| 亚洲精品无码久久久久去q| 国内精品久久久久久久久电影网| 免费精品国产日韩热久久| 亚洲中文字幕无码久久2017| 亚洲AV日韩AV天堂久久| 国产精品99精品久久免费|