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

            ACE運行時的初始化和結(jié)束時的回收操作

            url: http://www.shnenglu.com/ace

            ???ace?VERSION:? 5.4 . 9

            ???HOST?MACHINE?and?OPERATING?SYSTEM:
            ???????Windows?XP?SP1

            ???COMPILER?NAME?AND?VERSION?(AND?PATCHLEVEL):
            ???????Microsoft?Visual?C
            ++ ?.NET

            ???THE?$ACE_ROOT
            / ace / config.h?FILE:
            ???????#include?
            " ace/config-win32.h "

            ???DOES?THE?PROBLEM?AFFECT:
            ???????EXECUTION

            ???SYNOPSIS:
            ???????In?my?dll?ace?work?incorrect,?but?
            in ?exe?good.

            ???REPEAT?BY:


            // 正確:測試連接的簡單程序
            #include? < iostream >
            #include?
            " ace/INET_Addr.h "
            #include?
            " ace/SOCK_Connector.h "
            #include?
            " ace/SOCK_Stream.h "

            int ?_tmain( int ?argc,?_TCHAR * ?argv[])
            {
            ???std::cout?
            << ? " Hi\n " ;

            ???
            // ?Create?remote?address
            ???ACE_INET_Addr?server_addr;
            ???
            if ?(?server_addr. set (? 1234 ,?INADDR_LOOPBACK?)? == ? - 1 ?)? {
            ???????std::cout?
            << ? " Bad?address\n " ;
            ???????
            return ? 1 ;
            ???}


            ???
            // ?Create?connection
            ???ACE_SOCK_Connector?connector;
            ???ACE_SOCK_Stream?connection;
            ???
            if ?(connector.connect?(connection,?server_addr)? < ? 0 )?? {
            ???????std::cout?
            << ? " Connection?failed\n " ;
            ???????
            return ? 2 ;
            ???}


            ???
            return ? 0 ;
            }


            // 不正確:放在Dll項目中的代碼片斷

            #include?
            " ace/INET_Addr.h "
            #include?
            " ace/SOCK_Connector.h "
            #include?
            " ace/SOCK_Stream.h "

            BOOL?APIENTRY?DllMain(?HANDLE?hModule,
            ??????????????????????DWORD??ul_reason_for_call,
            ??????????????????????LPVOID?lpReserved
            ????????????????????????????????????????)
            {
            ???????
            switch ?(ul_reason_for_call)
            ???????
            {
            ???????
            case ?DLL_PROCESS_ATTACH:
            ???????
            case ?DLL_THREAD_ATTACH:
            ???????
            case ?DLL_THREAD_DETACH:
            ???????
            case ?DLL_PROCESS_DETACH:
            ???????????????
            break ;
            ???????}

            ???
            return ?TRUE;
            }


            int ?test()
            {
            ???
            // ?Create?remote?address
            ???ACE_INET_Addr?server_addr;
            ???
            if ?(?server_addr. set (? 1234 ,?INADDR_LOOPBACK?)? == ? - 1 ?)? {
            ???????
            return ? 1 ;
            ???}


            ???
            // ?Create?connection
            ???ACE_SOCK_Connector?connector;
            ???ACE_SOCK_Stream?connection;
            ???
            if ?(connector.connect?(connection,?server_addr)? < ? 0 )?? {
            ???????
            return ? 2 ;
            ???}


            ???
            return ? 0 ;
            }



            如果我從dll中調(diào)用 test()函數(shù),函數(shù)返回2...

            ========================
            解答:

            平臺不同及兼容性問題的一個特殊地方是運行時對象的初始化和程序退出時與那相類象相關(guān)的析構(gòu)操作。這種不同尤其表現(xiàn)在包含有多線程的時候,這是因為編譯器沒有附加的能力來順序訪問那些有先后之分的運行時對象(靜態(tài)數(shù)據(jù))的自動初始化和析構(gòu)的方法。因此ACE說的一句話"靜態(tài)是邪惡的",幸運的是,ACE提供了一種可移植的解決方案來解決對象初始化和析構(gòu)的問題。

            如果你的程序不是從標準的main()開始的,你需要在初始化和結(jié)束時用到對象管理器。你需要調(diào)用下面兩個函數(shù):

            ace::init() 在其它ACE操作之行前初始化對象管理器。

            ace::fini() 在你的ACE操作完成后,結(jié)束對象管理器。這個調(diào)用將觸發(fā)注冊在對象管理器中所有對象的clearup操作。

            這對于Windows程序來說可能很要緊,因為Windows程序使有WinMain()好過于標準的main()函數(shù),在庫中使用ACE但用戶找不到主程序入口。對于庫來說,為庫分別提供初始化結(jié)束化函數(shù)來分別調(diào)用ACE::init()和ACE::fini()是非常有用的。

            posted on 2006-05-16 10:20 Stone Jiang 閱讀(1125) 評論(0)  編輯 收藏 引用 所屬分類: ACE
            久久人人爽人人爽人人片AV不| 无码人妻久久一区二区三区| 久久综合精品国产二区无码| 久久精品国产亚洲AV香蕉| 亚洲午夜福利精品久久| 久久久久无码精品国产不卡| 久久精品女人天堂AV麻| 蜜桃麻豆WWW久久囤产精品| 久久丫精品国产亚洲av不卡| 国产激情久久久久影院老熟女| 亚洲&#228;v永久无码精品天堂久久 | 国产精品一区二区久久国产| 久久99国产亚洲高清观看首页| 人人狠狠综合久久亚洲| 成人免费网站久久久| 午夜精品久久久内射近拍高清 | 亚洲中文字幕无码久久综合网| 日韩精品国产自在久久现线拍 | 国内精品久久久久影院日本| 久久噜噜久久久精品66| 一级做a爰片久久毛片人呢| 久久人与动人物a级毛片| 久久精品夜色噜噜亚洲A∨| 丁香狠狠色婷婷久久综合| 亚洲日韩中文无码久久| 久久精品免费全国观看国产| 青青热久久综合网伊人| 久久久www免费人成精品| 香蕉aa三级久久毛片| 国产亚洲美女精品久久久| 亚洲精品国产成人99久久| 9久久9久久精品| 久久国产精品久久精品国产| 久久国产精品一国产精品金尊| 久久久久亚洲精品日久生情| 亚洲成av人片不卡无码久久| 久久无码国产| 亚洲va久久久久| 午夜天堂精品久久久久| 亚洲AV日韩精品久久久久久| 伊人久久大香线蕉av一区|