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

            2010年8月7日

            轉一篇說明的比較不錯的:

            句柄是WONDOWS用來標識被應用程序所建立或使用的對象的唯一整數,WINDOWS使用各種各樣的句柄標識諸如應用程序實例,窗口,控制,位圖,GDI對象等等。WINDOWS句柄有點象C語言中的文件句柄。


            從 上面的定義中的我們可以看到,句柄是一個標識符,是拿來標識對象或者項目的,它就象我們的姓名一樣,每個人都會有一個,不同的人的姓名不一樣,但是,也可 能有一個名字和你一樣的人。從數據類型上來看它只是一個16位的無符號整數。應用程序幾乎總是通過調用一個WINDOWS函數來獲得一個句柄,之后其他的 WINDOWS函數就可以使用該句柄,以引用相應的對象。


            如果想更透徹一點地認識句柄,我可以告訴大家,句柄是 一種指向指針的指針。我們知道,所謂指針是一種內存地址。應用程序啟動后,組成這個程序的各對象是住留在內存的。如果簡單地理解,似乎我們只要獲知這個內 存的首地址,那么就可以隨時用這個地址訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一個以虛擬內存為基礎的操作 系統。在這種系統環境下,Windows內存管理器經常在內存中來回移動對象,依此來滿足各種應用程序的內存需要。對象被移動意味著它的地址變化了。如果 地址總是如此變化,我們該到哪里去找該對象呢?


            為了解決這個問題,Windows操作系統為各應用程序騰出一些內存儲地址,用來 專門登記各應用對象在內存中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows內存管理器在移動對象在內存中的位置后,把對象新的地 址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在內存中的哪個位置。這個地址是在對象裝載(Load)時由系統分配給 的,當系統卸載時(Unload)又釋放給系統。



            句柄地址(穩定)→記載著對象在內存中的地址────→對象在內存中的地址(不穩定)→實際對象



            本質:WINDOWS程序中并不是用物理地址來標識一個內存塊,文件,任務或動態裝入模塊的,相反的,WINDOWS API給這些項目分配確定的句柄,并將句柄返回給應用程序,然后通過句柄來進行操作。



            但 是必須注意的是程序每次從新啟動,系統不能保證分配給這個程序的句柄還是原來的那個句柄,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成 是一個應用程序的啟動運行,那么系統給應用程序分配的句柄總是不一樣,這和每次電影院售給我們的門票總是不同的一個座位是一樣的道理。

            受M$的幫助文檔以及很多Windows編程書籍的影響,大家對局柄比較普遍的認識是:句柄是一個整數,用以標識Windows對象,句柄不是一個指針……


            而實際上,這些不過是M$進行數據封裝的幌子而已,下面我們一起來分析一下HANDLE到底是什么。


            請先到Windef.h找絕大多數句柄的定義:

            DECLARE_HANDLE(HWND);

            DECLARE_HANDLE(HHOOK);

            ……

            DECLARE_HANDLE(HGDIOBJ);

            DECLARE_HANDLE(HBITMAP);

            DECLARE_HANDLE(HBRUSH);

            ……

            typedef HANDLE HGLOBAL;

            typedef HANDLE HLOCAL;

            ……


            OK, 現在大家跟我一起翻到Winnt.h,看看DECLARE_HANDLE和HANDLE到底是什么:

            #ifdef STRICT

            typedef void *HANDLE;

            #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name

            #else

            typedef PVOID HANDLE;

            #define DECLARE_HANDLE(name) typedef HANDLE name

            #endif

            typedef HANDLE *PHANDLE;


            哈哈,現在知道了吧,HANDLE就是PVOID,也就是無類型指針,

            而DECLARE_HANDLE(HWND);就是:

            struct HWND__ {

              int unused;};

            typedef struct HWND__ *HWND;

            現在實際上都清楚啦,這些Handles都不過是指向struct的指針,至于這個struct的用處,連M$都說unused了,^o^


            現在解釋下M$這么做的意義,這就是所謂數據封裝,你可以在你的程序中把M$的內部結構指針傳來傳去,可是你卻不知道它到底指向的內容是什么,而且可以編個句柄的瞎話防止大家的質疑:)。而M$的程序大可以這么寫:

            #include <windows.h> //這個和大家用的一樣

            #include "windows_in.h" //這個是M$自用的,外人別想看到^o^


            HSOMETHINGELSE DoSomething(HSOMETHING hSomething) {

              struct RealSomething* p = (struct RealSomething*)hSomething; //先強制類型轉換成內部結構指針

              ……do something……

              return (HSOMETHINGELSE)pRealSomethingElse;//強制類型逆轉換
            posted @ 2010-08-07 10:13 欣萌 閱讀(489) | 評論 (0)編輯 收藏

            2010年8月6日

            我準備了三天。  然后得到百度的實習生offer  可惜時間不合適。

            我真的很想去那里工作,讓自己更加的進步。。

            追求   熱情   技術 我都不愿意放棄

            posted @ 2010-08-06 09:31 欣萌 閱讀(115) | 評論 (0)編輯 收藏

            2010年7月21日

            又下雨了

            不能去游泳了。。。。。。


            現在又沒有下雨了。。。


            細細
            posted @ 2010-07-21 14:42 欣萌 閱讀(229) | 評論 (0)編輯 收藏

            2010年7月16日

            之前寫的不算。

            現在要做的是 智能監控下的普通監控平臺

            把從采集卡采集到的數據 壓縮, 打包多路發送,同時給智能監控留接口。智能監控為給我報警區域和報警信號。 然后打包發送。

            接收端顯示。


            這不是我的本意 但是導師讓我做。
            posted @ 2010-07-16 15:03 欣萌 閱讀(389) | 評論 (4)編輯 收藏

            2010年7月14日

            4路攝像頭USB的

            一個視頻轉發服務器 兼備 流媒體服務器

            N個監控端

            N個瀏覽器端

            攝像頭 采集---> 壓縮(h264)--->TCP--->視頻轉發服務器--->組合4路碼流--->RTP--->監控端--->解碼--->顯示

            視頻轉發服務器需要保存264數據,控制監控端的訪問權。保存的數據 放入流媒體服務器(Live555),供IE查看(安裝VLC的插件)。 可能需要轉碼。

            用到的庫

            jrtp  live555 vcl ffmpeg sdl

            posted @ 2010-07-14 16:15 欣萌 閱讀(312) | 評論 (0)編輯 收藏

            2010年7月12日

            好好準備

            打好基礎

            奮斗 奮斗

            posted @ 2010-07-12 11:58 欣萌 閱讀(243) | 評論 (0)編輯 收藏

            2010年7月7日


            學習中 每2個月遇到大瓶頸一次

            半個月小瓶頸一次


            遇到瓶頸 解決的時間在拉長。


            Code  看書 看博客 逛論壇 Code


            posted @ 2010-07-07 17:17 欣萌 閱讀(246) | 評論 (1)編輯 收藏

            2010年7月2日

            在復習Primer的時候看到的。


            void RetrieveEmailFromPage(const string& page, const string& url)
            {
                int posCur = 0, posStart, posAt, posEnd, posTmp;
                string email;
                string tags = "._-" "abcdefg" "hijklmn" "opqrst" "uvwxyz"
                    "ABCDEFG" "HIJKLMN" "OPQRST" "UVWXYZ" "0123456789";

                while (true) {
                    if ((posAt = page.find('@', posCur)) != string::npos) {
                        posStart = page.find_last_not_of(tags, posAt - 1) + 1;
                        posEnd = page.find_first_not_of(tags, posAt + 1);
                        posTmp = page.find('.', posAt + 1);
            // domain has at least one dot "xxx.yy"

                        if (posTmp != string::npos && posTmp < posEnd - 1 && posStart != posAt && posEnd != posAt + 1) {
                            email = page.substr(posStart, posEnd - posStart);
                            AddEmail(email, url); // add the email to special data struct
                        }
                        posCur = posEnd;
                    } else {
                        return;
                    }
                }
            //while
            }


            posted @ 2010-07-02 10:42 欣萌 閱讀(261) | 評論 (0)編輯 收藏
             
            因為導師的臨時反悔,我不能去實習了。

            很對不起實習公司。覺得自己浪費的別人的時間。經過這么多面試,好不容易的機會,本來想去好好學習,順便解決畢業論文的問題。沒想到,導師會出爾反爾。 唉。

            GoogleDOC好像也不能新建文檔了。

            以后這里就成了我 摘抄小程序,寫體會的地方了。



            posted @ 2010-07-02 10:39 欣萌 閱讀(269) | 評論 (2)編輯 收藏
            僅列出標題  
             
            久久精品国产精品亚洲毛片| 日本久久久久亚洲中字幕| 亚洲天堂久久精品| 久久久久国产精品嫩草影院 | 香蕉99久久国产综合精品宅男自| 欧洲国产伦久久久久久久 | 久久综合鬼色88久久精品综合自在自线噜噜 | 久久狠狠一本精品综合网| 精品久久久久久久久免费影院| 日韩精品久久无码人妻中文字幕| 久久香蕉综合色一综合色88| 中文字幕久久精品| 日本免费一区二区久久人人澡| 久久久久久久波多野结衣高潮| 亚洲午夜精品久久久久久人妖| 99久久免费国产精品特黄| 久久99精品国产一区二区三区| 久久AV无码精品人妻糸列| 99久久免费国产精品| 国产精品免费看久久久| 热99RE久久精品这里都是精品免费| 欧美777精品久久久久网| 欧美日韩精品久久久久| 久久乐国产精品亚洲综合| 久久久91精品国产一区二区三区| 日韩乱码人妻无码中文字幕久久 | 91精品国产综合久久精品| 国产香蕉久久精品综合网| 色综合久久天天综线观看| 久久久久人妻精品一区三寸蜜桃 | 亚洲а∨天堂久久精品9966| 亚洲一区中文字幕久久| 97久久国产亚洲精品超碰热| 久久婷婷五月综合色奶水99啪| 97精品依人久久久大香线蕉97| 伊人久久无码精品中文字幕| 综合久久一区二区三区 | 久久香蕉国产线看观看99| 91久久精品视频| 精品熟女少妇aⅴ免费久久| 国产精品99久久久久久宅男|