程序間通訊

2022-03-10 15:52:52 字數 4628 閱讀 8694

程序間通訊

1.

剪貼簿新建乙個

mfc基於單文件的應用程式,取名:

匿名管道

父程序:

新建乙個

mfc的單文件應用程式,取名:

並分別對這三個選單新增命令訊息響應函式,再在

cparentview

類上新增兩個成員變數,

private

: handle hwrite; 

handle hread;

再在建構函式中初始化,在析構函式中關閉控制代碼,如下:

cparentview::cparentview() 

cparentview::~cparentview() 

void cparentview::onpipecreate()  

startupinfo sui; 

process_information pi;//

程序資訊結構體

zeromemory(&sui,sizeof(startupinfo));//

把結構體

startupinfo

所有成員賦值為

0 sui.cb=sizeof(startupinfo);//

對此結構體本身大小的成員賦值

sui.dwflags=startf_usestdhandles;//

為子程序設定標準的輸入、輸出和錯誤控制代碼

sui.hstdinput=hread;//

將子程序的標準輸入控制代碼設定成管道的讀控制代碼

sui.hstdoutput=hwrite;//

將子程序的標準輸入控制代碼設定成管道的寫控制代碼

sui.hstderror=getstdhandle(std_error_handle);//

標準錯誤控制代碼

if(!createprocess("..\\child\\debug\\child.exe",null,null,null, 

true,0,null,null,&sui,&pi))//

啟動子程序

else

} void cparentview::onpiperead()  

messagebox(buf);

} void cparentview::onpipewrite()  

}子程序:

在workspace 'parent'

上點右鍵

-> add new project to wordspace… ,

新建乙個

mfc單文件應用程式,取名

然後分別對這兩個選單項新增訊息響應函式,並

cchildview

類上新增乙個

oninitialupdate

虛函式,再新增兩個成員變數:

private

: handle hread; 

handle hwrite;

在建構函式和析構函式中:

cchildview::cchildview() 

cchildview::~cchildview() 

然後在childview.cpp

void cchildview::onpiperead()  

messagebox(buf);

} void cchildview::onpipewrite()  

} void cchildview::oninitialupdate()  

3.

命名管道

服務端:

新建乙個

mfc的單文件應用程式,取名:

namedpipesrv,

並分別對這三個選單新增命令訊息響應函式,再在

cnamedpipesrvview

類上新增乙個成員變數:

private

: handle hpipe;

cnamedpipesrvview::cnamedpipesrvview() 

cnamedpipesrvview::~cnamedpipesrvview() 

在namedpipesrvview.cpp

void cnamedpipesrvview::onpipecreate()  

handle hevent; 

hevent=createevent(null,true,false,null);//

建立乙個人工重置的事件物件

if(!hevent)  } 

if(wait_failed==waitforsingleobject(hevent,infinite)) 

//等待事件物件,直到它變為有訊號狀態

closehandle(hevent);//

關閉事件物件

} voidcnamedpipesrvview::onpiperead()  

messagebox(buf);

} void cnamedpipesrvview::onpipewrite()   }

客戶端:

在workspace 'namedpipesrv'

上點右鍵

-> add new project to wordspace… ,

新建乙個

mfc單文件應用程式,取名

然後分別對這兩個選單項新增訊息響應函式,並

cnamedpipecltview

類上新增乙個成員變數:

private

: handle hpipe;

cnamepipecltview::cnamepipecltview() 

cnamepipecltview::~cnamepipecltview() 

編輯namepipecltview.cpp:

void cnamepipecltview::onpipeconnect()  

hpipe=createfile("\\\\.\\pipe\\mypipe",generic_read|generic_write, 

0,null,open_existing,file_attribute_normal,null);//

開啟命名管道例項

if(invalid_handle_value==hpipe) 

} void cnamepipecltview::onpiperead()  

messagebox(buf);

} void cnamepipecltview::onpipewrite()  

}4.

利用郵槽完成程序間通訊

伺服器端:

新建乙個

mfc單文件應用程式,取名:

}客戶端:

在workspace 'mailslotsrv'

上點右鍵

-> add new project to wordspace… ,

新建乙個

mfc單文件應用程式,取名

郵槽測試程式"; 

dword dwwrite; 

if(!writefile(hmailslot,buf,strlen(buf)+1,&dwwrite,null)) 

closehandle(hmailslot);

}執行,

ok !

php程序間通訊 yoc PHP程序間通訊

php是用c編寫的,因此它對系統底層api的操作與c很像,同大多數語言一樣,php程序間通訊的方式有以下幾種 訊息佇列,管道,共享記憶體,socket和訊號。本文是對這幾種通訊方式對整理 管道通訊pipe 管道用於承載簡稱之間的通訊資料。為了方便理解,可以將管道比作檔案,程序a將資料寫到管道p中,然...

程序間通訊

實現程序間資料共享除了常用的記憶體檔案對映外,對於一些非檔案的資料共享可以直接使用wm copydata。如果需要在程序a傳遞資料到程序b,簡單的實現如下 在程序a中 cstring strdatatosend t hello 需要傳遞的資料 hwnd hwndreceived 程序b的接收資料視窗...

程序間通訊

最近做專案遇到奇怪的問題,我在主線程中建立乙個工作執行緒。在工作執行緒中用sendmessage向主線程傳送訊息,通知主線程操作office 物件。getactiveobject時提示 hr 0x8001010d 因為應用程式正在傳送乙個輸入同步呼叫,所以無法執行傳出的呼叫。我把sendmessag...