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

            CppExplore

            一切像霧像雨又像風(fēng)

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              29 隨筆 :: 0 文章 :: 280 評論 :: 0 Trackbacks
            共6頁: 1 2 3 4 5 6 
            @田伯光
            多個(gè)進(jìn)程指向同一個(gè)文件的話,的確都可以寫進(jìn)去。至于是不是穩(wěn)定就不清楚了,呵呵,我一直是單進(jìn)程多線程下使用,偶爾忘記程序已經(jīng)啟動,第二次啟動,同樣會把log寫進(jìn)文件。
            你多測試下吧。
            log4cplus的配置文件的配置方式網(wǎng)上不少,或者你留個(gè)郵箱,我發(fā)給你。
            @mono,給你個(gè)可以編譯通過的宏,不知道你是win下還linux下,下面的宏都可以,另外流式的log不容易和printf、ace等對應(yīng),也看個(gè)人喜好,我是認(rèn)為printf的方式更容易格式化輸出。
            #define USE_LOG4CPLUS
            #ifdef USE_LOG4CPLUS
            #include <log4cplus/configurator.h>
            #include <string>
            static log4cplus::Logger logger= log4cplus::Logger::getInstance("Log");
            static void init_log(const std::string & path)
            {
            log4cplus::PropertyConfigurator::doConfigure(path);
            }
            #define XLOG_ALL log4cplus::TRACE_LOG_LEVEL
            #define XLOG_TRACE log4cplus::TRACE_LOG_LEVEL
            #define XLOG_DEBUG log4cplus::DEBUG_LOG_LEVEL
            #define XLOG_INFO log4cplus::INFO_LOG_LEVEL
            #define XLOG_NOTICE log4cplus::INFO_LOG_LEVEL
            #define XLOG_WARNING log4cplus::WARN_LOG_LEVEL
            #define XLOG_ERROR log4cplus::ERROR_LOG_LEVEL
            #define XLOG_CRITICAL log4cplus::FATAL_LOG_LEVEL

            #ifdef WIN32
            #if (_MSC_VER < 1500)
            #define vsnprintf _vsnprintf
            #endif
            void inline win_log( int l, const char *format, ... )
            {
            if(logger.isEnabledFor(l)) {
            schar buf[2046]={0};
            va_list list;
            va_start( list, format );
            vsnprintf( buf, (size_t)2045,format, list );
            va_end( list );
            logger.forcedLog(l, buf, __FILE__, __LINE__);
            }
            }
            #define X_LOG win_log
            #else
            #define X_LOG(l, ...) \
            do { \
            if(logger.isEnabledFor(l)) { \
            char __buf__internal__[2046]={0}; \
            snprintf(__buf__internal__,2045,__VA_ARGS__); \
            logger.forcedLog(l, __buf__internal__, __FILE__, __LINE__); \
            } \
            } while(0)
            #endif
            @guosha
            沒有用過。
            log是個(gè)小功能,封裝下能做到透明使用基本就可以了。log4c依賴apr庫,如果你的主體程序不是在apr上構(gòu)建的話,引入log4c不太舒服,呵呵。
            。。。。。。。。。。。
            路過。。。。。。。。。
            。。。。。。。。。。。
            @mono
            #define USE_LOG4CPLUS
            之后就編譯正確了吧,或者你把define USE_ACE_LOG那段去掉,可以用printf調(diào)式。
            你的需求是什么樣子的?我用于server端程序,在main函數(shù)開始,來句:
            #ifdef USE_LOG4CPLUS
            init_log("./log.properties");
            #endif
            之后就再就是正常的程序啟動了,起各個(gè)協(xié)議棧、線程。當(dāng)然log也都是打印在一個(gè)log文件里。
            server端程序是一直運(yùn)行的,不會退出,也就不存在消亡的問題。
            @true
            業(yè)務(wù)線程也不見得是多線程實(shí)現(xiàn),尤其是是處理有上下文關(guān)聯(lián)關(guān)系(比如,rtsp協(xié)議,發(fā)了setup,才能發(fā)play,發(fā)送teardown之后才結(jié)束,不同階段狀態(tài)是不同的,http是無狀態(tài)的協(xié)議就另說了)邏輯的業(yè)務(wù)線程 ,一般都是單線程。把握住系統(tǒng)瓶頸的所在,在關(guān)鍵業(yè)務(wù)瓶頸處加多線程。另外,如果真想實(shí)現(xiàn)你說的情況,可以綁定connection和上層業(yè)務(wù)線程,我覺得這不會有性能的提升,當(dāng)然也要看你的業(yè)務(wù)應(yīng)用場景。
            @伐木鼎鼎
            呵呵,沒那么嚴(yán)重,可以做丟包重傳機(jī)制,這樣第一次a發(fā)給b的包可能會被拒收,第一個(gè)b發(fā)給a的也可能被拒收,但后面的包就正常了。
            @cui
            呵呵,那是線程(二)中說的。
            開始寫文章有不少錯(cuò)誤的認(rèn)識,后來對問題的看法再不停的調(diào)整,但舊有的文章中有的錯(cuò)誤說法一直沒有更正。這篇文章里的信號量就是一例。
            @powervv
            不錯(cuò)。二進(jìn)制包更多的是對字節(jié)序、字節(jié)對齊問題的深入。關(guān)鍵的地方還是struct結(jié)構(gòu)的準(zhǔn)確定義,包括大小端、字節(jié)對齊問題。幸好一般協(xié)議在定義的時(shí)候,都會注意字節(jié)對齊問題,不夠1字節(jié)也會加padding補(bǔ)充,呵呵。
            除了字節(jié)補(bǔ)充完成外,一般也都會保證4字節(jié)對齊完成,因此文中舉例的3字節(jié)結(jié)構(gòu)體實(shí)際中是不存在的,即便是不要額外信息,協(xié)議也會在seq前規(guī)定1字節(jié)的padding補(bǔ)充滿4字節(jié),在seq前補(bǔ)充也是為了避免設(shè)置pack(1)。
            感謝補(bǔ)充!
            @cui
            多謝。最近看到了,這個(gè)是信號安全的系統(tǒng)調(diào)用。
            @小魚
            忘記說et下的fd要設(shè)置非阻塞,其實(shí)多路復(fù)用函數(shù)下的fd一般都是非阻塞模式。雖然要減少read的次數(shù),即便是lt模式下,也不能數(shù)據(jù)少就不讀,呵呵。ET下數(shù)據(jù)沒讀完,這個(gè)fd就永遠(yuǎn)不會有事件上來了。et是邊緣觸發(fā),就是從無數(shù)據(jù)到有數(shù)據(jù)這個(gè)變化點(diǎn)會觸發(fā),lt是水平觸發(fā),只要socket緩沖區(qū)有數(shù)據(jù)(當(dāng)?shù)统睂傩栽O(shè)置為1的時(shí)候,默認(rèn)也是1)就會觸發(fā)。
            ET模式下fd可讀 就要一直讀到返回-1并且errno是EAGAIN(信號中斷產(chǎn)生的EINTR要繼續(xù))??梢詍an epoll看到。
            ...............
            首頁上,你上篇文章之前的文章就是有關(guān) 成員函數(shù)委托 的,兩篇文章緊挨著
            @創(chuàng)
            listen后 accept前加fork是常見的設(shè)計(jì),在不使用多路復(fù)用函數(shù)的情況下
            @luke
            區(qū)別就是fork前生成fd ,會導(dǎo)致多個(gè)進(jìn)程在相同epoll上wait
            想法不錯(cuò),把a(bǔ)ccept前的多進(jìn)程用于多路復(fù)用函數(shù),完美的方案,呵呵。
            現(xiàn)實(shí)世界往往都不是那么完美。
            還沒看到過select poll epoll類的應(yīng)用前面可以加fork做這種領(lǐng)導(dǎo)者模型的。想想也不太現(xiàn)實(shí),即使可以多進(jìn)程select,那么一個(gè)被喚醒后,讀數(shù)據(jù)前,另一個(gè)也一定會被喚醒,這樣還是和單進(jìn)程一樣。
            非常不錯(cuò)!
            強(qiáng)大的消息映射、狀態(tài)機(jī)事件映射都要靠這個(gè)才能完美的解決成員函數(shù)的問題。
            頂一下
            前幾天我也剛寫了一個(gè),用在線程消息的處理中,我的消息類型做數(shù)組下標(biāo)了,直接定位取處理函數(shù),這都是無關(guān)緊要的細(xì)節(jié)。關(guān)鍵在ON_COMMAND宏的展現(xiàn)方式,我的處理線程消息,名字起做ON_MESSAGE
            整體思路基本都是一樣的,呵呵。
            @flw
            好東西 非常感謝
            來拜拜牛人!
            太牛了?。。。。。。。。。。。。。。?/div>
            個(gè)人有的項(xiàng)目用異常,有的不用,感覺不用異常能對代碼的控制力更強(qiáng),近來的項(xiàng)目已經(jīng)不用異常了。感覺不到用異常的好處。
            “當(dāng)構(gòu)造失敗時(shí)只有異??梢蕴幚怼保颂帢?gòu)造失敗是值什么?operator new失敗,還是構(gòu)造函數(shù)失敗?一,std::nothrow_t類型的new,可以不拋異常,返回值為0表示,也可以看出標(biāo)準(zhǔn)制訂者也看不出有不使用異常的需要,二 構(gòu)造函數(shù)中最好不要拋異常,構(gòu)造函數(shù)出現(xiàn)異常,則不會調(diào)用析構(gòu)函數(shù),直接調(diào)用operator delete刪除內(nèi)存,則構(gòu)造函數(shù)本身要負(fù)責(zé)初始化一半的那些結(jié)構(gòu)的清理工作,導(dǎo)致函數(shù)責(zé)任混亂,恰當(dāng)?shù)淖龇ㄊ菫槟切┧接袑傩猿跏蓟瘯l(fā)生失敗的操作單獨(dú)放在一個(gè)init()方法中。
            re: 08年07月16日[未登錄] CppExplore 2008-07-17 20:05
            @RichardHe
            我猜也是你拿到返回的數(shù)據(jù)很困難,呵呵。
            用socket吧 不需要用apache ace libevent那么復(fù)雜的封裝庫。寫個(gè)最基本最簡單的阻塞式socket,連接 發(fā)送 ,等響應(yīng),之后關(guān)閉就是了。發(fā)送就是發(fā)送這個(gè)好了:
            POST /url HTTP/1.1\r\n
            Content-Length: 24\r\n
            Content-Type: application/txt\r\n
            \r\n
            username=jim&pass=mypass

            詳細(xì)的信息可以問那邊要,他們一定有示例的頁面,用頁面發(fā)個(gè)請求,抓包就知道了。
            re: 08年07月16日[未登錄] cppexplore 2008-07-17 17:20
            @RichardHe
            web也是用的socket。http的通訊方式如下:
            建立連接(connect)
            發(fā)送請求(send)
            接收響應(yīng)(recv)
            斷開連接(close)
            每次請求響應(yīng) 都要建立連接,斷開連接,就是tcp短連接,也是http使用的方式。
            http的格式可以看rfc,或者抓包看看就知道
            一般是(post方式才需要body的):
            post/get/header url http/1.1\r\n
            header: value\r\n
            Content-Length: ..\r\n
            Content-Type: ..\r\n
            \r\n
            body

            內(nèi)嵌web可以說是個(gè)很快速的方案,只要你能拿到web上返回的數(shù)據(jù),又何必自己寫socket發(fā)數(shù)據(jù)呢?;蛘呖梢砸贿呌脙?nèi)嵌web寫原型系統(tǒng),一邊寫socket方式的。
            re: 08年07月16日[未登錄] cppexplore 2008-07-17 13:01
            @ 代李
            可以

            這對博主來說是個(gè)好方案,還是用socket發(fā)送,可以建立tcp短連接,發(fā)送的數(shù)據(jù)采用http協(xié)議格式的,這樣就兩邊皆大歡喜了吧。
            re: 08年07月16日[未登錄] cppexplore 2008-07-17 12:18
            根本原因還是因?yàn)槟沁厸]有socket,想直接用servlet吧。這樣他們那邊的改動很小,不需要涉入他們不熟悉的領(lǐng)域。被hook,指鍵盤輸入嗎,web下一樣可以。單純的得出結(jié)論:web輸入比client端輸入更安全,這個(gè)論調(diào)還需要詳細(xì)的論證吧,用客戶端的東東多了去了,也都沒用客戶端嵌入web的方式輸密碼。
            https可以用ssl加密隧道,socket一樣可以。
            這個(gè)問題就是要么你們改,他們不改,要么他們不改,你們用web輸入。
            衡量2個(gè)方案的改動量,還是你們改比較簡單。
            re: 08年07月16日[未登錄] cppexplore 2008-07-17 08:41
            他們的server端是java之類的東西寫的吧。
            他們不會或者懶得寫socket,想直接用servelet而已
            系統(tǒng)全面的看下
            要不 今天發(fā)現(xiàn)了fork 很驚奇感慨
            明天又發(fā)現(xiàn)了pthread_cond,又很驚奇感慨
            某天又發(fā)現(xiàn)了pthread_testcancel,又很驚奇感慨
            某天天又發(fā)現(xiàn)了還有驚群的說法,再來感慨。

            不如直接瀏覽下apue unp之類的書,全面的看下。
            博主還是很有專研精神的,把握好大方向,基礎(chǔ)打堅(jiān)實(shí),.......
            唉 深入學(xué)習(xí)前 先多看看基礎(chǔ)的書
            linux上都是用gettimeofday
            win上還是ftime,一般為了跨平臺,win上會實(shí)現(xiàn)gettimeofday,如下:
            int inline gettimeofday (struct timeval *tp, void *tz)
            {
            struct _timeb timebuffer;

            _ftime (&timebuffer);
            tp->tv_sec = timebuffer.time;
            tp->tv_usec = timebuffer.millitm * 1000;
            return 0;
            }
            開源都是*inux友好的,tgz是linux下的常見壓縮包。tar zvxf .tgz解壓。
            and removed!
            re: Epoll筆記![未登錄] cppexplore 2008-06-24 11:32
            沒覺得有什么必要性,每個(gè)socket都有自己的緩存的,不是共用的,再引入的復(fù)雜性和產(chǎn)出之間權(quán)衡下。網(wǎng)絡(luò)層上接線程消息隊(duì)列,屬于系統(tǒng)線程劃分的范疇,不僅epoll可以 select、poll等每個(gè)都可以。
            完全與iocp相同,自己封裝就可,僅僅是外在的表現(xiàn)形式,并不是穿了一件AIO的外衣 就有AIO的性能。
            @夢在天涯
            哈哈,暴露了。我給他開玩笑呢。學(xué)生時(shí)代不好好學(xué)習(xí),不思進(jìn)取,不對,但也有很多變通的方法,明天下午遞交,前天晚上抱佛腳,這個(gè)錯(cuò)誤太嚴(yán)重,更嚴(yán)重的是沒有找到變通的正確方法,老以為不通過任何的努力,天上就能掉餡餅,還能咬上一口。
            re: Epoll筆記![未登錄] CppExplore 2008-06-23 12:25
            socket本身有發(fā)送緩沖區(qū)的,不必再關(guān)聯(lián)寫數(shù)據(jù)隊(duì)列或緩存。不放心可以開大緩沖區(qū)。
            @free2000fly
            不好意思 原來是是連續(xù)的 呵呵
            描述的太簡單太簡單了 看了之后難以跟進(jìn)重現(xiàn)啊
            放首頁,炫耀意義大于借鑒意義
            @Jeff
            udp也可以啊,模型簡單,在一個(gè)端口上復(fù)用就可以了,沒什么可寫的。
            頂下!
            re: SGI STL的內(nèi)存池[未登錄] CppExplore 2008-06-12 22:52
            唉 水已經(jīng)滿了 會錯(cuò)過很多東西的
            re: std::queue的front的問題[未登錄] cppexplore 2008-06-10 12:39
            value_type& front( );
            只是說明返回的時(shí)候,不copy副本返回,直接返回私有屬性本身。
            比如:
            class A
            {
            public:
            A():a_(9){}
            const int & get_a()const{return a_;}
            private:
            int a_;
            };
            int main()
            {
            A a;
            printf("it's %d\n",a.get_a()+4);
            return 0;
            }
            a.get_a()+4這個(gè)其實(shí)就是a_+4,而不設(shè)計(jì)到內(nèi)存copy問題。如果get_a()前沒有引用,則意味著先要把a(bǔ)_復(fù)制一副本,副本再和4相加。
            該文中,int head=則是賦值操作,和后面的是否是引用無關(guān),基本類型,當(dāng)然會有效。
            暈倒
            chinaunix上的是你哦,我是voipexplore。string內(nèi)存布局不透明,只能用new類,不能用malloc類。
            另樓上 包含string.h 是為了用memset
            呵呵 我要表達(dá)的主要意思在后半句。
            “等程序改好了之后再把代碼弄出來”??
            呵呵 最好改好的時(shí)候把思路 主要難題 代碼放到首頁。本文這種放首頁就沒什么意義,授人以魚,不如授人以漁。
            放在首頁的時(shí)候 能不能考慮下 文章是不是有一定的原創(chuàng)性 能不能讓看的人有點(diǎn)收獲
            系統(tǒng)常用命令、vim常用命令都很有用處 為何不從深度、廣度兩方面著手整理下再發(fā)到首頁呢
            呵呵 博主很堅(jiān)持啊
            呵呵 以為我的log框架你會喜歡,看來我錯(cuò)了。不過還有一句話“如果你沒使用過log4cplus,ok,那么下載一個(gè)log4cplus,編譯,......,嘗試以下,你一定會驚嘆log4cplus的強(qiáng)大與美妙?!?/div>
            還沒接觸過語音板卡 我們的應(yīng)用沒有媒體編解碼或者dtmf檢測的。有時(shí)間向你討教討教,留個(gè)聯(lián)系方式吧,我的gtalk/gmail是gamil.com的,msn是live.com的,名稱都是zongjinliang。
            @true
            呵呵 linux上的應(yīng)用服務(wù)器 軟交換服務(wù)器 流媒體服務(wù)器等。
            呵呵 兄弟拉到項(xiàng)目 找我合作啊 server端服務(wù)器協(xié)議開發(fā) 業(yè)務(wù)開發(fā)以及數(shù)據(jù)庫到web無所不能啊
            re: 關(guān)于epoll[未登錄] cppexplore 2008-05-19 08:42
            我測試的結(jié)果,兩者沒有明顯的性能差異。
            1、c 學(xué)生時(shí)代的唯一途徑,數(shù)據(jù)結(jié)構(gòu)也是考研的必考科目:結(jié)構(gòu)和算法
            2、c 編譯原理的課程作業(yè)
            3、a(學(xué)生時(shí)代),當(dāng)時(shí)沒研究過stl,更沒聽過boost
            4、b(現(xiàn)在),更多的是封裝實(shí)現(xiàn)模塊,極少考慮基礎(chǔ)的結(jié)構(gòu),純c下freebsd的宏結(jié)構(gòu)也都很不錯(cuò)。

            linux/gcc/g++
            第一個(gè)信令端口超時(shí)了 一定間隔內(nèi)發(fā)點(diǎn)命令過去就好
            最后下載結(jié)束的時(shí)候 會檢測信令端口是否超時(shí)的
            共6頁: 1 2 3 4 5 6 
            思思久久好好热精品国产| 亚洲国产天堂久久综合网站| 久久精品视频免费| 久久精品国产网红主播| 亚洲中文字幕无码一久久区| 欧美国产成人久久精品| 中文字幕久久亚洲一区| 狠狠色丁香婷婷久久综合五月 | 污污内射久久一区二区欧美日韩| 久久九九有精品国产23百花影院| 久久久精品午夜免费不卡| 色综合色天天久久婷婷基地| 99久久国产综合精品网成人影院| 久久线看观看精品香蕉国产| 国产日韩久久免费影院| 久久亚洲天堂| 亚洲乱码中文字幕久久孕妇黑人| 蜜臀av性久久久久蜜臀aⅴ| …久久精品99久久香蕉国产| 久久se精品一区二区| 欧美久久天天综合香蕉伊| 日日躁夜夜躁狠狠久久AV| 2021精品国产综合久久| 久久精品国产99久久香蕉| 99精品国产99久久久久久97| 久久99热只有频精品8| 久久精品国产精品亚洲下载| 久久中文字幕人妻丝袜| 色综合久久精品中文字幕首页| 久久青青草原精品国产软件| 日韩精品久久久久久久电影蜜臀| 91久久精品国产91性色也| 亚洲国产精品成人AV无码久久综合影院 | 久久国产亚洲精品| 精品综合久久久久久97超人| 综合久久精品色| 久久se这里只有精品| 久久亚洲精品成人AV| 午夜精品久久久久久影视777| 久久国产亚洲精品无码| 免费无码国产欧美久久18|