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

            我自閑庭信步,悠然自得,不亦樂乎.

                                                   ------ Keep life simple
            GMail/GTalk/MSN:huyi.zg@gmail.com

             

            2006.03.05夜

            一個周末過完了。
            今天晚上腦子比較清醒,想清楚了tim中好幾個問題。
            同時也想TT了,一轉眼,四個月沒見面了吧,仿佛昨天還在一起吃米線,還在一起上圖書館,還在寒冷的夜里出去買柚子,病了還有人照顧我,一切都是歷歷在目,不過再一算,已經一年多了吧。
            TT老婆,我會一輩子愛護你,關心你,照顧你。今天晚上也和朋友提起,我告訴他我其實沒什么理想,只要能幸福的和TT生活在一起,就足夠了,應該說,這才是我真正的理想。
            有幸福的家,一定會有成功的事業。
            o_復件 009.JPG

            posted @ 2006-03-05 22:55 HuYi 閱讀(191) | 評論 (0)編輯 收藏

            TIM中c2s的事件反應模型

                 摘要: 為了更容易理解后面的內容,先給出登錄jabber服務器的交互包。 登錄的xml片斷Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1C:  2<?xml version="1.0"?>...  閱讀全文

            posted @ 2006-03-03 13:40 HuYi 閱讀(478) | 評論 (0)編輯 收藏

            大寫字符串快速轉換成小寫的函數

             1/* 32-bit, little-endian. suif.liyuan */
             2
             3int zbyter(unsigned int x)
             4
             5{
             6
             7     unsigned int y;
             8
             9     y = (x & 0x7F7F7F7F+ 0x7F7F7F7F;
            10
            11     y = ~(y | x | 0x7F7F7F7F);
            12
            13     if (y == 0)
            14
            15          return 4;
            16
            17     else if (y & 0x0000FFFF)
            18
            19          return ((y >> 7& 1^ 1;
            20
            21     else
            22
            23          return ((y >> 23& 1^ 3;
            24
            25 }

            26
            27 int UptoLow(char* pszString)
            28
            29{
            30
            31     char* pByte = 0;
            32
            33     int* pn4byte = 0;
            34
            35     int zPos;
            36
            37     pn4byte = (int*)pszString;
            38
            39     while (true)
            40
            41     {
            42
            43         zPos = zbyter(*pn4byte);
            44
            45         if (4 != zPos) break;
            46
            47         *pn4byte++ |= 0x20202020;
            48
            49     }

            50
            51     pByte = (char*)pn4byte;
            52
            53     for (int i = 0; i < zPos; ++i)
            54
            55         *pByte++ |= 0x20;
            56
            57     return 1;
            58
            59}
             
            似乎很高效的樣子:)

            posted @ 2006-03-03 13:01 HuYi 閱讀(1011) | 評論 (0)編輯 收藏

            有新的支持asp.net的http和ftp空間了!

               其實四川電信的吳先生早就為我們提供了服務器,不過無奈網通電信本是冤家,自古就有“南電信北網通”的說法,我這里訪問吳先生提供的服務器,速度非常的慢。所以利用率一直不高。

            這里感謝神州通訊的林先生,又為我們提供了服務器和二級域名(huyi.newxz.com),這個空間主要用于存放和TIM項目相關的東西。

            世界上可愛的人真多

            posted @ 2006-03-03 12:56 HuYi 閱讀(286) | 評論 (0)編輯 收藏

            階段式服務器模型(SEDA)

            SEDA似乎是近期大家比較關心的一個話題。

            http://groups.google.com/group/dev4server/browse_thread/thread/3abd7fddba2401ea/8b9e21b7ce827430#8b9e21b7ce827430

            posted @ 2006-03-03 12:00 HuYi 閱讀(693) | 評論 (0)編輯 收藏

            STL中string的初始化問題

            在郵件列表中有朋友提出:

            1//我希望把string賦值10,然后顯示
            2string Buffer;
            3sprintf( Buffer.begin(),"%d",10);
            4MessageBox(NULL,Buffer.begin(),NULL,MB_OK);

            建個程序,編譯它,是通不過的。原因是Buffer沒有初值,調用Buffer.begin()返回是NULL,第三句用MessageBox彈出一個NULL的字符串,這是不可取的。

            1//改正后的程序
            2string Buffer = "a"//我隨便給了個初值
            3sprintf( Buffer.begin(),"%d",10);
            4MessageBox(NULL,Buffer.begin(),NULL,MB_OK);

            但是,上面這段程序,可讀性能差。別人會想:作者為什么給個"a"而不是"b"呢?

            所以我想請教大家:
            (1)這問題有沒有更好的方法?最好不要MFC,也不用char數組,因為整個程序中其它地方我都用了string。
            (2)STL為什么這么設計?
            難道定義Buffer以后,還沒有分配空間?如果已經有空間,為什么不用Begin()返回首個字符的地址?這樣做意義呵在?


            解答一:

            1// 這么定義:
            2string Buffer(256'\0');
            3// 或者
            4string Buffer;
            5Buffer.reserve(256);

            解答二:
            1// 1.使用boost:Buffer = boost::lexical_cast<string>(10);
            2// 2.如果不想用boost:
            3#include <sstream>
            4
            5std::stringstream sstr;
            6sstr << 10;
            7Buffer = sstr.str();
            8// 或者:
            9Buffer = (std::stringstream() << 10).str(); 

            解答三:
             1  std::vector<char> buf(buffer_size, 0);
             2  _snprintf(&buf[0], buffer_size, "%d\0"10);
             3  // 賦值給字符串
             4  std::string str = &buf[0];
             5  MessageBox(NULL, str.c_str(), NULL, MB_OK);
             6//好處:
             7//    1. 使用std::vector避免手動new/delete
             8//    2. 使用stl可以充分利用stl的alloc(如stlport的memory pool)
             9//    3. 使用_snprintf防止溢出
            10//    4. std::string = std::vector(安逸:)

            解答四:
            1  char buf[32];
            2  _snprintf(buf, 32"%d"10);//或者用itoa(10, buf, 10);
            3  string str = buf;

            有朋友發現一個錯誤:
            看到一個明顯錯誤的做法:str.reserve(NLEN)之后直接去sprintf。要知道reserve只是把capacity擴充到NLEN,并不會擴充size。對于某些標準庫實現,這樣的做法極端危險,它會破壞string的不變式,導致一系列嚴重問題,比如str.size()str.length()得到錯誤的值。

            oscar.ken@gmail.com
             1#ifdef  UNICODE
             2
             3# define tchar wchar_t
             4# define tstring std::wstring
             5
             6#else
             7
             8# define tchar char
             9# define tstring std::string
            10
            11#endif
            12inline tstring FormatString(const tchar* fmt, )
            13{
            14 static tchar tmp[2048];
            15 memset(tmp, 02048 * sizeof(tchar));
            16 va_list args;
            17 va_start(args, fmt);
            18 int re = _vsntprintf(tmp, 2048, fmt, args);
            19 va_end(args);
            20 return tstring(tmp);
            21}

            22
            23// 如果2048不夠用,可以改造一個template版本

            千里馬肝:
            如果這樣
            那不如直接使用boost::format導出一個stream的string,更安逸(當然會慢一些)
             
            PS,對于FormatString為了保證format出來的是一個string,每次memset,個人認為無大必要,不如自動在formatstring的最后每次自動加上\
            0  (XD)

            如果我沒有記錯的話
            _snprintf是不會自動補\0的
            而sprintf會
            所以要么char buf[
            32= {0},要么_snprintf( "%d\0")
            另外vector的使用是為了配合“不定長buf”而存在,并非buf[
            32]的替代品

            Jiong Tu:
            你搞錯了,不補0的是strncpy,不是snprintf

            吳詠煒:
            用 STL 的最大好處就是空間大小可以自動增長,不會發生緩沖區溢出(安全問
            題)。否則,又何必付出緩慢的堆上分配的代價呢?——除非要把結果傳回去,那還
            有意義;但最初蘇益彧提出的問題中并不存在這樣的需求。

            另外順便提一下,如果棧上分配內存大小不固定,也不一定就要改用堆上分配。
            C99 支持數組大小運行時決定(而非 C89
            /C++98 的編譯時決定),而(不支持
            C99 的)大部分 C
            /C++ 編譯器也都支持一個非標準的 alloca 函數用于進行棧上
            分配。這個函數通常由編譯器內聯實現,需要效率的場合會用得上。

            另外,你測出的 
            50% 應當是總體的性能下降。純粹的內存分配/釋放操作,堆上分
            配和棧上分配的性能根本不在同一個量級,差距通常在十倍以上。

            posted @ 2006-03-03 11:20 HuYi 閱讀(4121) | 評論 (0)編輯 收藏

            C++ 中大家使用什么樣的事件模型?

            WL 提出:
            很明顯 C++ 里面沒有一個很好的事件模型,除了 VC7
            的統一事件模型之外,不知道大家都用的什么樣的事件模型,都是自己寫的嗎?VC7的統一事件模型不知道性能、開銷如何,文檔太少了。

            詳細請參閱:

            http://groups.google.com/group/dev4server/browse_thread/thread/5e87109f87d60472/0acd3059709df059

            posted @ 2006-03-03 11:16 HuYi 閱讀(417) | 評論 (0)編輯 收藏

            僅列出標題
            共7頁: 1 2 3 4 5 6 7 

            導航

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            相冊

            收藏夾

            友情鏈接

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            精品国产VA久久久久久久冰| 久久国产欧美日韩精品| 品成人欧美大片久久国产欧美| 久久国产精品久久| 欧美日韩精品久久久久| 久久亚洲AV成人出白浆无码国产| 国产精品视频久久| 久久精品视频91| 久久99国产精品久久99| 亚洲欧美另类日本久久国产真实乱对白 | 无码人妻久久久一区二区三区| 久久99精品国产99久久| 2021国内精品久久久久久影院| 精品国产91久久久久久久 | 亚洲一区中文字幕久久| 精品熟女少妇AV免费久久| 国产午夜福利精品久久| 一本久久a久久精品亚洲| 国产91久久综合| 国产精品久久久亚洲| 中文字幕无码久久久| 久久久久久国产精品免费免费| 性高湖久久久久久久久| 一本综合久久国产二区| 国产成人99久久亚洲综合精品| 久久久久久久亚洲Av无码| 亚洲天堂久久久| 色综合合久久天天给综看| 久久这里只有精品久久| 久久久久人妻一区二区三区vr| 免费无码国产欧美久久18| 人妻无码久久精品| 久久九九久精品国产免费直播| 久久精品9988| 久久精品国产亚洲欧美| 久久美女人爽女人爽| 亚洲狠狠久久综合一区77777| 久久99热国产这有精品| 91久久精品国产成人久久| 国产精品成人99久久久久91gav | 天天影视色香欲综合久久|