《vc進(jìn)程間通信》word版

《vc進(jìn)程間通信》word版

ID:30365738

大?。?6.38 KB

頁數(shù):18頁

時(shí)間:2018-12-29

《vc進(jìn)程間通信》word版_第1頁
《vc進(jìn)程間通信》word版_第2頁
《vc進(jìn)程間通信》word版_第3頁
《vc進(jìn)程間通信》word版_第4頁
《vc進(jìn)程間通信》word版_第5頁
資源描述:

《《vc進(jìn)程間通信》word版》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、VC進(jìn)程間通信在Windows下各個任務(wù)是以不同的進(jìn)程來完成的,當(dāng)一個進(jìn)程啟動后,操作系統(tǒng)為其分配了4GB的私有地址空間,由于位于同一個進(jìn)程中的線程共享同一個地址空間,所以線程間的通信很簡單,就像兩個人如果在同一個房間里說話的話就比較容易,只要動動嘴皮子就OK了,但是如果在兩個國家里就比較麻煩,必須借助于一些其他的手段,比如打電話等.以下介紹四種進(jìn)程通信方式,雖然是在windows下的環(huán)境但是在其他的操作系統(tǒng)里也遵循著同樣的原理,不信的話可以把大學(xué)里的操作系統(tǒng)教材拿出來看看,它們分別是剪貼板、匿名管道、命名管道和郵槽。1.剪貼板(clipboard)其實(shí)這個東西我們每天操作電腦的時(shí)候都在接觸,

2、我們經(jīng)常實(shí)用ctrl+c和ctrl+v就是基于了剪貼板的方式來實(shí)現(xiàn)了兩個進(jìn)程間的通信,就拿我現(xiàn)在來說吧,我在寫這篇文章的時(shí)候是在notepad下寫的,一會我要把這篇文章里的所有文字都粘貼到csdn的網(wǎng)頁上,這里就是兩個進(jìn)程,一個是notepad進(jìn)程和一個IE進(jìn)程進(jìn)行通信,它們要傳輸?shù)臄?shù)據(jù)格式是TEXT,當(dāng)然你也可以把這些內(nèi)容拷貝到word、Excel、PowerPoint甚至是另一個notepad上面(你要清楚再啟動一個notepad,這個跟前一個notepad是兩個進(jìn)程,雖然它們長得很像),這就說明剪貼板是所有程序都可以訪問的,如果你對多線程編程比較了解的話,你就會明白一個數(shù)據(jù)一旦要被很多線

3、程訪問,如果這些線程中有一些需要求改這個數(shù)據(jù),就要對這個數(shù)據(jù)加鎖來保證數(shù)據(jù)的正確性了,剪貼板也是一樣的,當(dāng)我把這段文字ctrl+c時(shí),它就要先對系統(tǒng)中的剪貼板加鎖,然后把內(nèi)容放進(jìn)去,再釋放鎖,如果你明白了以上的一些道理,那么請你繼續(xù)往下看,如果還沒太明白那也請你繼續(xù)往下看,也許你對文字的理解能力已經(jīng)落后于對代碼的理解了.BOOLOpenClipboard()windows提供的一個API函數(shù),作用是打開剪貼板,如果程序打開了剪貼板,則其他程序經(jīng)不能修改剪貼板(道理上面講了),直到CloseClipboard(),在windows中所有帶有Open這個單詞的函數(shù)都會有一個與之對應(yīng)的帶有Close

4、這個單詞的函數(shù),而且你在open之后一定不要忘記close,你可以自己試試看,只調(diào)用OpenClipboard()而不去執(zhí)行CloseClipboard()會有什么效果,至今我還沒有發(fā)現(xiàn)例外的情況,如果你發(fā)現(xiàn)了請你告訴我.HANDLESetClipboardData(UINTuFormat,HANDLEhMem)它的作用是將hMem所"代表"的內(nèi)存中的內(nèi)容以uFormat的格式放到剪貼板上,詳細(xì)的參數(shù)說明去查MSDN吧,這里你可能有一些疑問,hMem是個句柄而內(nèi)存是用指針來訪問的,你說的沒錯,所以我用了"代表"這個詞而沒有用"指向",在windows里很多資源都會有一個HANDLE以它來標(biāo)識各

5、個資源一遍于操作系統(tǒng)的管理,內(nèi)存也一樣,我們一般動態(tài)開辟(用new,malloc)的heap都不會被操作系統(tǒng)任意移動,因?yàn)樗且粋€進(jìn)程的私有空間,而如果你開辟全局Heap數(shù)據(jù)的話,操作系統(tǒng)很可能會移動它,如果這個時(shí)候你已然使用指針的話,那么操作系統(tǒng)一旦移動了一塊全局Heap數(shù)據(jù)就要修改到所有指向這塊內(nèi)存的指針,這顯然不現(xiàn)實(shí),而這個時(shí)候如果你已然使用你的指針來管理那塊內(nèi)存的話,那就出了大麻煩,因?yàn)槟菈K內(nèi)存已經(jīng)被移走了,而如果使用句柄來標(biāo)識這塊內(nèi)存的話則會解決這個問題,因?yàn)樗皇且粋€標(biāo)簽,并沒有實(shí)際的物理意義,就像如果你使用一個人的家庭住址來標(biāo)識這個人的話就會有麻煩,因?yàn)橐坏┧嶙吡耍憔驼义e人了

6、,但是以身份證號就OK了,詳細(xì)的情況可以參考GlobalAlloc這個函數(shù)。BOOLIsClipboardFormatAvailable(UINTuFormat)這個函數(shù)的作用就是要檢查一下剪貼板中的數(shù)據(jù)是否是uFormat形式的,比如我現(xiàn)打開了mspaint(畫圖板)程序畫了幾筆,然后Ctrl+C,再打開notepad程序Ctrl+V,你當(dāng)然知道這不會成功,它就是使用了這個API函數(shù)在粘貼前判斷了一下剪貼板中的數(shù)據(jù)類型是否是我所需要的.好了我們下面來寫兩個進(jìn)程來實(shí)現(xiàn)它們的通信,事先說明我寫的只是關(guān)鍵代碼并不能直接運(yùn)行發(fā)送方:voidSend(char*pSnd){if(OpenClipboa

7、rd()){HANDLEhClip;char*pBuf=NULL;//對一個指針變量以NULL來初始化是個很好的習(xí)慣EmptyClipboard();//清空剪貼板上的內(nèi)容hClip=GlobalAlloc(GMEM_MOVEABLE,strlen(pSnd)+1);pBuf=(char*)GlobalLock(hClip);//得到句柄標(biāo)識的內(nèi)存的實(shí)際物理地址,lock后系統(tǒng)就不能把它亂移動了s

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。