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

            ATL COM初探(1)

             

            我沒(méi)有看過(guò)任何的COM書(shū)籍,以下總結(jié)均是我個(gè)人在ATL框架下的實(shí)驗(yàn)所得,如有錯(cuò)誤望指正。目前的實(shí)驗(yàn)都是單進(jìn)程中的,至于跨進(jìn)程的實(shí)驗(yàn)還未進(jìn)行。

            Apartment:

            這是一個(gè)抽象的概念,我簡(jiǎn)單的將其理解為作用域(COM對(duì)象的生存空間)。可以分為Single-Threaded Apartment(STA)和Multi-Threaded Apartment(MTA),至于Neutral Apartment, Thread Neutral Apartment, Neutral Threaded Apartment(NA, TNA, NTA)還沒(méi)接觸過(guò)。一個(gè)進(jìn)程中可以存在多個(gè)STA,但只能存在一個(gè)MTA。創(chuàng)建COM對(duì)象所需要的Apartment類型不存在的時(shí)候,系統(tǒng)會(huì)自行創(chuàng)建。

            主STA:

            在進(jìn)程中沒(méi)有任何STA的情況下,第一個(gè)初始化的STA(包括之前存在STA但已經(jīng)退出的情況)稱為主STA。在獲取(創(chuàng)建)單線程COM對(duì)象時(shí),如果在沒(méi)有主STA的情況下(哪怕存在STA,但主STA退出了),系統(tǒng)會(huì)向RPC申請(qǐng)一個(gè)線程來(lái)創(chuàng)建一個(gè)主STA,換句話說(shuō)就是STA是無(wú)法改變自身的主從屬性的,主從屬性從初始化的時(shí)刻其就決定了。系統(tǒng)進(jìn)行同步的STA至少需要一個(gè)消息循環(huán),否則代理對(duì)象會(huì)被阻塞(系統(tǒng)創(chuàng)建的STA會(huì)自帶一個(gè)消息循環(huán))。

            單線程COM:

            只能存在于主STA,在非主STA中系統(tǒng)會(huì)使用代理對(duì)象進(jìn)行訪問(wèn)并利用窗口消息進(jìn)行同步,也就是說(shuō)只有主STA得到的是原始指針,其他的Apartment得到的均為代理指針。如果我們想將某個(gè)COM對(duì)象約束在某個(gè)線程中,那么這個(gè)模型是很適合的。只要這個(gè)線程初始化關(guān)聯(lián)主STA,那么這個(gè)模型的COM對(duì)象都會(huì)存在于這個(gè)線程了(因?yàn)橐粋€(gè)STA作用域是不能跨線程的)。

            單元COM:

            存在于STA,在非所屬STA中系統(tǒng)會(huì)使用代理對(duì)象進(jìn)行訪問(wèn)并利用窗口消息進(jìn)行同步,也就是說(shuō)只有在STA中創(chuàng)建得到的是原始指針,Marshal得到的都是代理指針,MTA中創(chuàng)建得到的也是代理指針。

            兩者COM:

            STA和MTA創(chuàng)建均得到原始指針。在與對(duì)象的創(chuàng)建不同的Apartment中得到的將是代理指針(可以指定得到原始指針,但這會(huì)失去系統(tǒng)對(duì)STA對(duì)象的訪問(wèn)同步),若創(chuàng)建的是STA對(duì)象,那么系統(tǒng)會(huì)利用窗口消息進(jìn)行同步;若創(chuàng)建的是MTA對(duì)象,系統(tǒng)不會(huì)進(jìn)行同步。

            自由COM:

            只存在于MTA,在STA中創(chuàng)建或者M(jìn)arshal得到的都是代理指針,但系統(tǒng)不會(huì)進(jìn)行同步。在MTA中創(chuàng)建和Marshal得到的都是原始指針。

            中性COM:

            STA和MTA創(chuàng)建均得到代理指針。Marshal得到的代理指針均為同一個(gè)指針,系統(tǒng)不會(huì)進(jìn)行同步。只能得到代理指針可能是因?yàn)槠渲淮嬖谟贜A中的緣故吧。

            作者: Evil.Ghost 發(fā)表于 2011-03-11 11:12 原文鏈接

            評(píng)論: 0 查看評(píng)論 發(fā)表評(píng)論


            最新新聞:
            · 蘋(píng)果iPad 2通過(guò)3C認(rèn)證 最晚5月國(guó)內(nèi)上市(2011-04-10 09:18)
            · 盲目依賴iPhone等工具導(dǎo)航 英國(guó)驢友迷路多(2011-04-10 09:14)
            · 趣談:想擔(dān)任CEO的話,最好是去蘋(píng)果工作,其次是微軟,再才是Google(2011-04-10 08:26)
            · 騰訊將建立新數(shù)據(jù)中心,規(guī)模為蘋(píng)果的兩倍(2011-04-10 08:25)
            · 輕量化的微型博客Tumblr(2011-04-10 08:03)

            編輯推薦:非戰(zhàn)之罪,從永中Office談起

            網(wǎng)站導(dǎo)航:博客園首頁(yè)  我的園子  新聞  閃存  小組  博問(wèn)  知識(shí)庫(kù)

            posted on 2011-03-11 11:12 EvilGhost 閱讀(399) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案(12)

            文章檔案(1)

            最新隨筆

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产精品久久新婚兰兰| 亚洲综合精品香蕉久久网| 亚洲国产精品无码久久98| 尹人香蕉久久99天天拍| 久久精品国产亚洲av高清漫画| 久久婷婷五月综合97色| 国产欧美久久一区二区| 国产精品久久久久天天影视| 久久精品中文字幕久久| 91精品国产综合久久香蕉 | 久久久久久午夜成人影院| 色噜噜狠狠先锋影音久久| 久久久久亚洲AV成人网| 久久久国产视频| 国产情侣久久久久aⅴ免费| 久久久久人妻精品一区三寸蜜桃| 亚洲国产日韩欧美久久| 久久久国产精品福利免费 | 久久久久这里只有精品 | 久久青草国产精品一区| 亚洲国产成人久久综合野外| 国产成年无码久久久免费| 国产免费久久精品丫丫| 久久久一本精品99久久精品88| 国产∨亚洲V天堂无码久久久 | 久久久久青草线蕉综合超碰| 国产精品久久久久久一区二区三区 | 99久久成人18免费网站| 久久亚洲精品成人av无码网站| 久久精品国产精品亚洲| 久久亚洲国产中v天仙www| 国内精品伊人久久久久777| 丰满少妇人妻久久久久久4| 国产精品gz久久久| 综合网日日天干夜夜久久| 国产精品久久久亚洲| www性久久久com| 久久久久久精品久久久久| 国产精自产拍久久久久久蜜| 亚洲AV日韩AV永久无码久久| 91久久香蕉国产熟女线看|