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

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

ID:20300819

大小:38.50 KB

頁數(shù):10頁

時間:2018-10-12

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

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

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

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

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

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

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

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

當前文檔最多預覽五頁,下載文檔查看全文

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

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