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

            學(xué)習(xí)、成長(zhǎng)之路

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              16 Posts :: 0 Stories :: 27 Comments :: 0 Trackbacks

            常用鏈接

            留言簿

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            #

             1 BOOL CleanUrlCache(LPSTR lpUrl)
             2 {
             3     LPINTERNET_CACHE_ENTRY_INFO lpICEI = NULL;
             4     DWORD dwSize = 0;
             5     HANDLE hFind = FindFirstUrlCacheEntry(NULL, NULL, &dwSize);
             6     if (hFind == NULL && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
             7         return FALSE;
             8     
             9     lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];
            10     hFind = FindFirstUrlCacheEntry(NULL, lpICEI, &dwSize);
            11     if (hFind == NULL)
            12     {
            13         delete lpICEI;
            14         return FALSE;
            15     }
            16     
            17     do 
            18     {
            19         if (StrStrI(lpICEI->lpszSourceUrlName, lpUrl))
            20         {
            21             int bRet = DeleteUrlCacheEntry(lpICEI->lpszSourceUrlName);
            22         }
            23         delete lpICEI;
            24         lpICEI = NULL;
            25         dwSize = 0;
            26         
            27         if (!FindNextUrlCacheEntry(hFind, NULL, &dwSize) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
            28             break;
            29         lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];
            30     } while (FindNextUrlCacheEntry(hFind, lpICEI, &dwSize));
            31     
            32     if (lpICEI != NULL)
            33         delete lpICEI;
            34     return TRUE;
            35 }
            posted @ 2009-08-17 11:00 sToa 閱讀(653) | 評(píng)論 (0)編輯 收藏

            最近做一個(gè)項(xiàng)目,需要記錄系統(tǒng)里每個(gè)進(jìn)程訪問的IP及Port,然后提交到服務(wù)端進(jìn)行分析,我的思路是用一個(gè)緩存文件記錄所有進(jìn)程訪問網(wǎng)絡(luò)的信息,然后在主程序中提取記錄再提交。
            這里面涉及到多進(jìn)程訪問同一個(gè)緩存文件的同步問題,于是封裝了下面這個(gè)類,自我感覺良好,拿出來和大家分享 :)

            * 使用類似于環(huán)形鏈表的機(jī)制來保證運(yùn)行效率


            測(cè)試程序如下:
             1 #include "RecodeLog.cpp"
             2 #include <stdio.h>
             3 #pragma pack(1)
             4 // 測(cè)試用結(jié)構(gòu),可自定義,結(jié)構(gòu)中不應(yīng)該包涵指針類型
             5 typedef struct _tagTestInfo
             6 {
             7     DWORD nTest;
             8     char szTest[32];
             9 }TESTINFO, *PTESTINFO;
            10 #pragma pack()
            11 
            12 ULONG WINAPI TestThread(PVOID pParam)
            13 {
            14     TESTINFO ti; 
            15     CRecodeLog<TESTINFO> *prl = new CRecodeLog<TESTINFO>("TestRL""c:\\trl.dat"1000);
            16     for (int i = 0; i < 100; i++)
            17     {
            18         ti.nTest = i;
            19         itoa(i, ti.szTest, 10);
            20         // 可在任意進(jìn)程或線程中調(diào)用該方法,不用考慮同步問題
            21         prl->AddLog(&ti);    // 寫入到緩沖文件中
            22     }
            23     delete prl;
            24     return 0;
            25 }
            26 
            27 int main(int argc, char* argv[])
            28 {
            29     // 開兩個(gè)線程,每個(gè)線程增加100條記錄
            30     HANDLE hThread, hThread2;
            31     hThread = CreateThread(NULL, NULL, TestThread, NULL, NULL, NULL);
            32     hThread2 = CreateThread(NULL, NULL, TestThread, NULL, NULL, NULL);
            33     WaitForSingleObject(hThread, INFINITE);
            34     WaitForSingleObject(hThread2, INFINITE);
            35     CloseHandle(hThread);
            36     CloseHandle(hThread2);
            37 
            38     
            39     CRecodeLog<TESTINFO> *prl = new CRecodeLog<TESTINFO>("TestRL""c:\\trl.dat"1000);
            40     TESTINFO getTi; 
            41     int ncount = 0;
            42     while (prl->GetTop(&getTi))    // 取最頂部的緩存記錄
            43     {
            44         printf("%d--%s\n", getTi.nTest, getTi.szTest);
            45         prl->DelTop();    //    刪除最頂端的緩存記錄
            46         ncount++;
            47     }
            48     printf("%d\n", ncount);
            49     delete prl;
            50 
            51     return 0;
            52 }

            從運(yùn)行結(jié)果可以看到主線程讀取到的記錄是亂序的,但沒有丟失的記錄。。

            下載示例代碼/Files/sToa/TestCache.rar
            posted @ 2009-08-16 13:41 sToa 閱讀(1754) | 評(píng)論 (1)編輯 收藏

             

            本代碼服務(wù)端引用了http://www.codeproject.com/KB/IP/IOCP_how_to_cook.aspx中的代碼,并作了少量修改,在這里對(duì)原作者表示感謝。。

            功能描述:
            * 封裝了心跳機(jī)制
            * 封裝了一層應(yīng)用層協(xié)議,支持壓縮傳輸
            * Client端封裝了掉線重連機(jī)制

            示例代碼演示了文件傳輸并輸出傳輸速度
            希望朋友們能不吝指教,幫助我進(jìn)步 :)

            點(diǎn)擊下載源碼

            服務(wù)端: 

            class CMyTcpServer : public CFTcpServer  
            {
            public:
                CMyTcpServer();
                
            virtual ~CMyTcpServer();
                
                
            virtual BOOL OnReadF(SCSocket *pSocket, PBYTE pData, DWORD dwLen)
                {
                    
            static DWORD btCount = 0;
                    
            static DWORD dwTime = GetTickCount();
                    
            static DWORD lastTime = dwTime;
                    btCount 
            += dwLen;
                    HANDLE    hFile 
            = CreateFile("c:\\abc.dat", GENERIC_WRITE, FILE_SHARE_WRITE,
                        NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                    SetFilePointer(hFile, 
            00, FILE_END);
                    DWORD dwBytesWrite 
            = 0;
                    WriteFile(hFile, pData, dwLen, 
            &dwBytesWrite, NULL);
                    CloseHandle(hFile);        
                    
                    DWORD dwTTT 
            = GetTickCount();
                    
            if (dwTTT - lastTime > 1000)
                    {
                        lastTime 
            = dwTTT;
                        printf(
            "%dkb/s %u\n", (int)(((double)btCount) * 1000 / (dwTTT - dwTime) / 1024), btCount);
                    }
                    
                    
            return TRUE;
                }
                
            virtual int OnConnected(SCSocket *pSocket){return TRUE};
            };


            int main(int argc, char* argv[])
            {
                CMyTcpServer::InitSocketLib();
                CMyTcpServer ts;
                ts.Start(
            990850008150000);
                
            while!_kbhit() ) ::Sleep(100);
                ts.Stop();
                
            return 0;
            }

              客戶端: 

            class CMyTcpClient : public CFTcpClient  
            {
            public:
                CMyTcpClient();
                
            virtual ~CMyTcpClient();
                
                
            virtual VOID OnConnected()
                {
                    
            char buff[BUFF_SIZE_C - 100];
                    HANDLE    hFile;
                    
                    hFile 
            = CreateFile("c:\\abc.dat", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
                    DWORD nNumberOfBytesRead 
            = 0;
                    
            int pos = 0;
                    
            while (ReadFile(hFile, buff, BUFF_SIZE_C - 100&nNumberOfBytesRead, NULL))
                    {
                        
            if (BUFF_SIZE_C - 100 == nNumberOfBytesRead)
                            Send(buff, nNumberOfBytesRead);
                        
            else
                            
            break;
                    }
                    CloseHandle(hFile);
                    Send(buff, nNumberOfBytesRead, TRUE);
                };
                
            virtual int OnReadF(LPSTR pData, int nSize)
                {
                    
            return TRUE;
                }
            };


            int main(int argc, char* argv[])
            {
                CMyTcpClient::InitSocketLib();
                CMyTcpClient 
            *pcl = new CMyTcpClient;
                pcl
            ->Start("192.168.1.138"9908);
                
            while!_kbhit() ) ::Sleep(100);
                
            return 0;
            }

             


             


            posted @ 2009-08-13 11:21 sToa 閱讀(3910) | 評(píng)論 (2)編輯 收藏

                 摘要: 原鏈接:http://bbs.pediy.com/showthread.php?t=63212&highlight=Hook+Api+lib稍微改了一下 // OpCode.h#if !defined(AFX_OPCODE_H__B8F7B840_D73F_461E_B08A_0202DD397B15__INCLUDED_)#define AFX_OPCOD...  閱讀全文
            posted @ 2009-07-31 12:06 sToa 閱讀(1723) | 評(píng)論 (0)編輯 收藏

            這個(gè)程序是2004年初學(xué)編程時(shí)的作品,當(dāng)時(shí)是憑著一種現(xiàn)在看來都有些欽佩自己的激情下作出的,感謝俄羅斯方塊帶我入門.
            這個(gè)程序雖然簡(jiǎn)陋,代碼也混亂,Ai智能也不高,但也算完整,希望對(duì)俄羅斯方塊程序有興趣的朋友有所幫助 :)

            /Files/sToa/20040607tetris.rar
            /Files/sToa/sztetris20040926_SRC.rar

            posted @ 2009-07-25 16:05 sToa 閱讀(3195) | 評(píng)論 (6)編輯 收藏

            看了幾位大嚇的回復(fù),深深地感覺到了這篇附筆中可能存在錯(cuò)誤,于是把最初遇到此問題時(shí)的環(huán)境再模擬了一下,現(xiàn)在可以確認(rèn)這篇附筆中的確存在問題,現(xiàn)在就修正一下,并對(duì)各位表示歉意.
            6月初的一個(gè)項(xiàng)目中需要寫一個(gè)高性能網(wǎng)絡(luò)服務(wù)端程序,在網(wǎng)上找到了一份很好的代碼(
            請(qǐng)參見),在使用過程中發(fā)現(xiàn)在多個(gè)cpp文件中引入這份代碼的h文件時(shí),會(huì)出現(xiàn)很多重復(fù)定義錯(cuò)誤,當(dāng)時(shí)很頭疼,沒能很好的解決問題.
            現(xiàn)總結(jié)一條:在使用類模板技術(shù)時(shí),可在.h中實(shí)現(xiàn),也可在.h和.cpp中分開實(shí)現(xiàn),若用.h實(shí)現(xiàn),不要在文件中加入非類模板代碼,可避免重寫定義錯(cuò)誤..
                  2009年7月25日23時(shí)58分58秒
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // 原文如下:Posted on 2009-07-25 15:10 sToa
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            1.聲明部分
            // Tpl.h
            #pragma once

            template<class T>
            class CTpl  
            {
            public:
                CTpl();
                virtual ~CTpl();

                void Test(T t);

            };

            2.實(shí)現(xiàn)部分
            // Tpl.cpp
            #include "Tpl.h"

            template<class T>
            CTpl<T>::CTpl()
            {

            }

            template<class T>
            CTpl<T>::~CTpl()
            {

            }

            template<class T>
            void CTpl<T>::Test(T t)
            {

            }
            3.習(xí)慣錯(cuò)誤用法
            // main.cpp
            #include "Tpl.h"

            int main()
            {
                CTpl<char> ts;
                ts.Test(3);
                return 0;
            }

            build時(shí)出現(xiàn)link錯(cuò)誤
            main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CTpl<char>::~CTpl<char>(void)" (??1?$CTpl@D@@UAE@XZ)
            main.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTpl<char>::Test(char)" (?Test@?$CTpl@D@@QAEXD@Z)
            main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTpl<char>::CTpl<char>(void)" (??0?$CTpl@D@@QAE@XZ)
            這組錯(cuò)誤信息和project中不加入Tpl.cpp的錯(cuò)誤信息一樣,即沒有CTpl<char>的實(shí)現(xiàn)代碼
            我們把Tpl.cpp包涵到main.cpp中,問題解決
            4.正確用法

            // main.cpp
            #include "tpl.cpp"
            int main()
            {
                CTpl<char> ts;
                ts.Test(3);
                return 0;
            }

            5.總結(jié)
            1.在使用以.h,.cpp分離實(shí)現(xiàn)模板類時(shí),不能像使用普通類一樣只簡(jiǎn)單的包涵.h頭文件,應(yīng)該在使用模板類的cpp文件中引入模板類相應(yīng)的cpp文件
            2.將模板類的聲明與實(shí)現(xiàn)都放在.h中(在多個(gè)cpp中使用不同模板參數(shù)時(shí)可能會(huì)引起重復(fù)定義的編譯錯(cuò)誤)




            posted @ 2009-07-25 15:10 sToa 閱讀(9157) | 評(píng)論 (7)編輯 收藏

            僅列出標(biāo)題
            共2頁(yè): 1 2 
            一级做a爱片久久毛片| 综合网日日天干夜夜久久 | 久久亚洲春色中文字幕久久久| 99热成人精品免费久久| 久久精品中文闷骚内射| 精品综合久久久久久97| 久久精品免费全国观看国产| 久久无码一区二区三区少妇| 久久亚洲精品无码播放| 日产精品久久久久久久性色| 久久精品无码一区二区日韩AV| 国产精品无码久久久久| 精品多毛少妇人妻AV免费久久| 色综合久久中文色婷婷| 久久免费小视频| 欧美一区二区三区久久综合 | 国内精品久久久久| 国产成人久久精品区一区二区| 99久久无色码中文字幕 | 99热热久久这里只有精品68| 一本色综合久久| 亚洲国产另类久久久精品小说 | 99久久99久久精品国产片果冻| 国产色综合久久无码有码| 99久久精品免费国产大片| 国产亚洲色婷婷久久99精品| 久久99国产精品一区二区| 欧美伊人久久大香线蕉综合| 午夜精品久久久久久久| 亚洲婷婷国产精品电影人久久| 久久久久99精品成人片三人毛片 | 久久久久亚洲AV成人片| 精品久久久无码21p发布| 亚洲国产视频久久| 久久久亚洲AV波多野结衣| 久久午夜无码鲁丝片秋霞| 青青青青久久精品国产h久久精品五福影院1421 | 久久丝袜精品中文字幕| 久久九九久精品国产| 久久久久国产| 怡红院日本一道日本久久|