程序間通訊
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...