• <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
            久久久久久国产精品免费免费| 91精品国产高清久久久久久91| 久久国产免费观看精品| 无码国内精品久久综合88| 国产一区二区精品久久岳| 99久久99久久| 国产精品久久永久免费| 精品久久久久久成人AV| 久久精品aⅴ无码中文字字幕重口| 精品无码久久久久国产动漫3d| 久久久久人妻一区二区三区 | 无码伊人66久久大杳蕉网站谷歌| 亚洲人成网站999久久久综合| 久久久久一本毛久久久| 久久99精品国产麻豆婷婷| A级毛片无码久久精品免费| 国产—久久香蕉国产线看观看 | 色综合合久久天天给综看| 久久99亚洲综合精品首页| 久久精品国产色蜜蜜麻豆| 精品久久久久香蕉网| 久久婷婷是五月综合色狠狠| 中文字幕精品无码久久久久久3D日动漫| 久久久久亚洲精品天堂久久久久久| 亚洲国产日韩欧美久久| 污污内射久久一区二区欧美日韩| 色婷婷噜噜久久国产精品12p| 久久久久久久久久久久久久| 久久精品麻豆日日躁夜夜躁| 一本久久a久久精品综合夜夜 | 伊人久久精品影院| 无码人妻久久一区二区三区免费丨| 亚洲香蕉网久久综合影视 | 久久国产成人精品麻豆 | 亚洲人成网站999久久久综合| 中文字幕久久精品无码| 国产美女久久久| 日韩精品久久久久久久电影| 久久久一本精品99久久精品66 | 亚洲午夜久久久久久久久久| 2021久久精品国产99国产精品|