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

            轉(zhuǎn)一篇說明的比較不錯(cuò)的:

            句柄是WONDOWS用來標(biāo)識(shí)被應(yīng)用程序所建立或使用的對(duì)象的唯一整數(shù),WINDOWS使用各種各樣的句柄標(biāo)識(shí)諸如應(yīng)用程序?qū)嵗翱冢刂疲粓D,GDI對(duì)象等等。WINDOWS句柄有點(diǎn)象C語言中的文件句柄。


            從 上面的定義中的我們可以看到,句柄是一個(gè)標(biāo)識(shí)符,是拿來標(biāo)識(shí)對(duì)象或者項(xiàng)目的,它就象我們的姓名一樣,每個(gè)人都會(huì)有一個(gè),不同的人的姓名不一樣,但是,也可 能有一個(gè)名字和你一樣的人。從數(shù)據(jù)類型上來看它只是一個(gè)16位的無符號(hào)整數(shù)。應(yīng)用程序幾乎總是通過調(diào)用一個(gè)WINDOWS函數(shù)來獲得一個(gè)句柄,之后其他的 WINDOWS函數(shù)就可以使用該句柄,以引用相應(yīng)的對(duì)象。


            如果想更透徹一點(diǎn)地認(rèn)識(shí)句柄,我可以告訴大家,句柄是 一種指向指針的指針。我們知道,所謂指針是一種內(nèi)存地址。應(yīng)用程序啟動(dòng)后,組成這個(gè)程序的各對(duì)象是住留在內(nèi)存的。如果簡單地理解,似乎我們只要獲知這個(gè)內(nèi) 存的首地址,那么就可以隨時(shí)用這個(gè)地址訪問對(duì)象。但是,如果您真的這樣認(rèn)為,那么您就大錯(cuò)特錯(cuò)了。我們知道,Windows是一個(gè)以虛擬內(nèi)存為基礎(chǔ)的操作 系統(tǒng)。在這種系統(tǒng)環(huán)境下,Windows內(nèi)存管理器經(jīng)常在內(nèi)存中來回移動(dòng)對(duì)象,依此來滿足各種應(yīng)用程序的內(nèi)存需要。對(duì)象被移動(dòng)意味著它的地址變化了。如果 地址總是如此變化,我們?cè)摰侥睦锶フ以搶?duì)象呢?


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



            句柄地址(穩(wěn)定)→記載著對(duì)象在內(nèi)存中的地址────→對(duì)象在內(nèi)存中的地址(不穩(wěn)定)→實(shí)際對(duì)象



            本質(zhì):WINDOWS程序中并不是用物理地址來標(biāo)識(shí)一個(gè)內(nèi)存塊,文件,任務(wù)或動(dòng)態(tài)裝入模塊的,相反的,WINDOWS API給這些項(xiàng)目分配確定的句柄,并將句柄返回給應(yīng)用程序,然后通過句柄來進(jìn)行操作。



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

            受M$的幫助文檔以及很多Windows編程書籍的影響,大家對(duì)局柄比較普遍的認(rèn)識(shí)是:句柄是一個(gè)整數(shù),用以標(biāo)識(shí)Windows對(duì)象,句柄不是一個(gè)指針……


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


            請(qǐng)先到Windef.h找絕大多數(shù)句柄的定義:

            DECLARE_HANDLE(HWND);

            DECLARE_HANDLE(HHOOK);

            ……

            DECLARE_HANDLE(HGDIOBJ);

            DECLARE_HANDLE(HBITMAP);

            DECLARE_HANDLE(HBRUSH);

            ……

            typedef HANDLE HGLOBAL;

            typedef HANDLE HLOCAL;

            ……


            OK, 現(xiàn)在大家跟我一起翻到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;


            哈哈,現(xiàn)在知道了吧,HANDLE就是PVOID,也就是無類型指針,

            而DECLARE_HANDLE(HWND);就是:

            struct HWND__ {

              int unused;};

            typedef struct HWND__ *HWND;

            現(xiàn)在實(shí)際上都清楚啦,這些Handles都不過是指向struct的指針,至于這個(gè)struct的用處,連M$都說unused了,^o^


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

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

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


            HSOMETHINGELSE DoSomething(HSOMETHING hSomething) {

              struct RealSomething* p = (struct RealSomething*)hSomething; //先強(qiáng)制類型轉(zhuǎn)換成內(nèi)部結(jié)構(gòu)指針

              ……do something……

              return (HSOMETHINGELSE)pRealSomethingElse;//強(qiáng)制類型逆轉(zhuǎn)換
            posted @ 2010-08-07 10:13 欣萌 閱讀(492) | 評(píng)論 (0)編輯 收藏

            2010年8月6日

            我準(zhǔn)備了三天。  然后得到百度的實(shí)習(xí)生offer  可惜時(shí)間不合適。

            我真的很想去那里工作,讓自己更加的進(jìn)步。。

            追求   熱情   技術(shù) 我都不愿意放棄

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

            2010年7月21日

            又下雨了

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


            現(xiàn)在又沒有下雨了。。。


            細(xì)細(xì)
            posted @ 2010-07-21 14:42 欣萌 閱讀(234) | 評(píng)論 (0)編輯 收藏

            2010年7月16日

            之前寫的不算。

            現(xiàn)在要做的是 智能監(jiān)控下的普通監(jiān)控平臺(tái)

            把從采集卡采集到的數(shù)據(jù) 壓縮, 打包多路發(fā)送,同時(shí)給智能監(jiān)控留接口。智能監(jiān)控為給我報(bào)警區(qū)域和報(bào)警信號(hào)。 然后打包發(fā)送。

            接收端顯示。


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

            2010年7月14日

            4路攝像頭USB的

            一個(gè)視頻轉(zhuǎn)發(fā)服務(wù)器 兼?zhèn)?流媒體服務(wù)器

            N個(gè)監(jiān)控端

            N個(gè)瀏覽器端

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

            視頻轉(zhuǎn)發(fā)服務(wù)器需要保存264數(shù)據(jù),控制監(jiān)控端的訪問權(quán)。保存的數(shù)據(jù) 放入流媒體服務(wù)器(Live555),供IE查看(安裝VLC的插件)。 可能需要轉(zhuǎn)碼。

            用到的庫

            jrtp  live555 vcl ffmpeg sdl

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

            2010年7月12日

            好好準(zhǔn)備

            打好基礎(chǔ)

            奮斗 奮斗

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

            2010年7月7日


            學(xué)習(xí)中 每2個(gè)月遇到大瓶頸一次

            半個(gè)月小瓶頸一次


            遇到瓶頸 解決的時(shí)間在拉長。


            Code  看書 看博客 逛論壇 Code


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

            2010年7月2日

            在復(fù)習(xí)Primer的時(shí)候看到的。


            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 欣萌 閱讀(264) | 評(píng)論 (0)編輯 收藏
             
            因?yàn)閷?dǎo)師的臨時(shí)反悔,我不能去實(shí)習(xí)了。

            很對(duì)不起實(shí)習(xí)公司。覺得自己浪費(fèi)的別人的時(shí)間。經(jīng)過這么多面試,好不容易的機(jī)會(huì),本來想去好好學(xué)習(xí),順便解決畢業(yè)論文的問題。沒想到,導(dǎo)師會(huì)出爾反爾。 唉。

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

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



            posted @ 2010-07-02 10:39 欣萌 閱讀(272) | 評(píng)論 (2)編輯 收藏
            僅列出標(biāo)題  
             
            国产精品久久久久影视不卡| 人人妻久久人人澡人人爽人人精品| 久久久久久久91精品免费观看| 四虎国产精品成人免费久久| 久久精品国产亚洲AV电影| 久久福利青草精品资源站免费| 久久久久这里只有精品 | 久久青青草原精品国产不卡| 伊人久久无码精品中文字幕| 久久久久亚洲AV成人网| 久久亚洲视频| 久久福利青草精品资源站| 要久久爱在线免费观看| 狠狠干狠狠久久| 久久狠狠爱亚洲综合影院| 18岁日韩内射颜射午夜久久成人| 香蕉99久久国产综合精品宅男自 | 久久婷婷激情综合色综合俺也去| 国产伊人久久| 久久99精品久久久久久久久久| 精品综合久久久久久88小说| 蜜臀久久99精品久久久久久小说| 久久精品成人免费观看97| 久久久久亚洲精品天堂| 久久免费视频6| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久婷婷五月综合97色一本一本 | 久久综合色区| 色综合久久88色综合天天| 久久精品国产清高在天天线| 久久乐国产综合亚洲精品| 国产精品无码久久久久| 亚洲国产精品久久| 久久er国产精品免费观看2| 99久久免费国产特黄| 久久久久99精品成人片欧美| 久久综合九色综合网站| 欧美亚洲国产精品久久久久| 一本色道久久88综合日韩精品 | 亚洲狠狠婷婷综合久久蜜芽 | 国产精品久久久久久久久软件|