vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信

vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信

ID:20300819

大?。?8.50 KB

頁(yè)數(shù):10頁(yè)

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

vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信_(tái)第1頁(yè)
vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信_(tái)第2頁(yè)
vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信_(tái)第3頁(yè)
vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信_(tái)第4頁(yè)
vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信_(tái)第5頁(yè)
資源描述:

《vc++環(huán)境下利用管道與線程實(shí)現(xiàn)進(jìn)程間通信》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、vc++環(huán)境下利用管道和線程實(shí)現(xiàn)進(jìn)程間通信VC++環(huán)境下利用管道和線程實(shí)現(xiàn)進(jìn)程間通信電子部第二十八研究所一部張杰一.引言----Windows95作為一個(gè)優(yōu)先多任務(wù)操作系統(tǒng),其重要特征之一是引入了多進(jìn)程和多線程機(jī)制。其中每個(gè)進(jìn)程都有私有的虛擬地址空間,可以創(chuàng)建多個(gè)線程,每個(gè)線程被分配一個(gè)時(shí)間片,且當(dāng)前執(zhí)行的線程在其時(shí)間片耗盡時(shí)掛起,讓其他線程運(yùn)行。由于各時(shí)間片很小,所以這時(shí)看起來(lái)就象是多個(gè)線程在同時(shí)工作。我們這里將會(huì)在子進(jìn)程Child中產(chǎn)生一個(gè)工作線程,它只在后臺(tái)處理任務(wù),而不會(huì)影響程序的使用。----有時(shí)用戶運(yùn)行的進(jìn)程之間毫無(wú)關(guān)系,但是進(jìn)程之間信息的交換則能產(chǎn)生協(xié)作效果,這

2、樣就可以完成某些單個(gè)進(jìn)程所不能完成的任務(wù)。Windows95可以使用多種通信手段,包括剪貼板、DDE、OLE,而且還增加了一些新的手段,其中管道是用來(lái)在不同程序之間交換信息的另一個(gè)新的簡(jiǎn)便的通信機(jī)制。與其它手段不同,管道沒(méi)有正式的標(biāo)準(zhǔn)或協(xié)議來(lái)控制信息傳遞,所以與DDE會(huì)話這樣的機(jī)制相比,管道更易于使用、更加靈活。管道實(shí)際上是一段共享內(nèi)存區(qū),進(jìn)程把共享消息放在那里。因?yàn)楣艿缹S糜谶M(jìn)程間的通信,所以Win32API提供了一組函數(shù)以方便信息交換。----本文我們將在VC++4.1環(huán)境下介紹一個(gè)父進(jìn)程和其子進(jìn)程的通信實(shí)例。在父進(jìn)程Parent窗口中按一下鼠標(biāo)左鍵,就會(huì)產(chǎn)生一個(gè)Pipe

3、和啟動(dòng)子進(jìn)程Child,并從Pipe一端發(fā)送信息,同時(shí)Child啟動(dòng)后會(huì)創(chuàng)建一個(gè)工作線程,專門用來(lái)從管道的另一端讀入數(shù)據(jù)。通過(guò)父進(jìn)程菜單項(xiàng)的控制來(lái)改變圖形形狀參數(shù),并傳給Child使之在自己的窗口中繪出響應(yīng)的圖形。下面分別就父進(jìn)程Parent和子進(jìn)程Child來(lái)進(jìn)行說(shuō)明。二.父進(jìn)程Parent----在父進(jìn)程Parent中,我們將創(chuàng)建管道和啟動(dòng)子進(jìn)程。首先說(shuō)明幾個(gè)相關(guān)函數(shù)。創(chuàng)建進(jìn)程函數(shù):BOOLCreateProcess(LPCTSTRlpApplicationName,//應(yīng)用模式指針LPTSTRlpCommandLine,//命令行字符串LPSECURITY_ATTRIB

4、UTESlpProcessAttributes,//進(jìn)程安全性指針LPSECURITY_ATTRIBUTESlpThreadAttributes,//主線程安全性指針BOOLbInheritHandles,//是否繼承句柄DWORDdwCreationFlags,//進(jìn)程類型與優(yōu)先級(jí)LPVOIDlpEnvironment,//環(huán)境塊指針LPCTSTRlpCurrentDirectory,//當(dāng)前目錄LPSTARTUPINFOlpStartupInfo,//STARTUPINFO結(jié)構(gòu)指針LPPROCESS_INFORMATIONlpProcessInformation//);/

5、/新進(jìn)程信息創(chuàng)建管道函數(shù):BOOLCreatePipe(PHANDLEhReadPipe,//讀句柄變量地址PHANDLEhWritePipe,//寫句柄變量地址LPSECURITY_ATTRIBUTESlpPipeAttributes,//安全屬性指針DWORDnSize);//管道緩沖區(qū)大小寫管道函數(shù):BOOLWriteFile(HANDLEhFile,//寫入文件句柄LPCVOIDlpBuffer,//寫入數(shù)據(jù)指針DWORDnNumberOfBytesToWrite,//要寫入字節(jié)數(shù)量LPDWORDlpNumberOfBytesWritten,//已寫入字節(jié)數(shù)地址LPO

6、VERLAPPEDlpOverlapped);//異步I/O結(jié)構(gòu)指針----下面從編程角度討論其實(shí)現(xiàn)步驟:----1.利用AppWizard(EXE)產(chǎn)生Parent應(yīng)用框架,然后再文件Parentview.cpp頭部加入#include,其中文件global.h定義了兩個(gè)進(jìn)程用于相互通信的結(jié)構(gòu)和常量值。代碼如下://////////////////Global.h共享變量頭文件typedefstructFigure{intiShape;//圖形控制參數(shù)}FIGURE,*PFIGURE;#defineID_RECT32771#defineID_ELLIPSE32772#def

7、ineID_TERMINATE32773----2.使用ClassWizard工具:選擇對(duì)應(yīng)于CParentView類的消息WM_LBUTTONDOWN,選擇AddFunction鍵,增加函數(shù)OnLButtonDown()。在主菜單資源中加入Rect、Ellipse、Terminate菜單項(xiàng),ID分別為IDC_RECT、IDR_ELLIPSE、IDR_TERMINATE,并在ClassWizard中加入相應(yīng)函數(shù)。在文件Parentview.h中加入如下代碼:public:BOOLSendCommand(

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

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

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