**:
程序間通訊有6種方法
1.剪貼簿(只能在本機上的程序間通訊)
a.建立個clipboard的對話方塊應用程式,加兩editbox和兩個button傳送接收。
b.具體**:
傳送端**:
if(openclipboard())
接收端**:
if(openclipboard())
}
2.匿名管道:只能在父子程序之間進行通訊(只能在本機上的程序間通訊)
a.先建乙個parent的單文件應用程式,增加「建立管道」「讀取資料」「寫入資料」三個選單
b.增加成員變數handle型別的hread,hwrite,初始化變數,並在析構函式中釋放控制代碼
c.響應選單**:
voidcparentview::onpipecreate() 選單「建立管道」**
startupinfo sui;
process_information pi;
zeromemory(&sui,sizeof
(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
}
選單「讀取資料」**
voidcparentview::onpiperead()
messagebox(buf);}
void
cparentview::onpipewrite() 選單「寫入資料」**
}
d.再建乙個child的單文件,在view中增加兩個成員hread和hwrite.在oninitialupdate()中得到控制代碼的值。
voidcchildview::oninitialupdate()
e.加選單「讀取資料」「寫入資料」其**如下:
voidcchildview::onpiperead()
messagebox(buf);}
void
cchildview::onpipewrite()
}
3.命名管道:還可以跨網路通訊,伺服器只能在win2000和nt下執行!而客戶端可以在95下執行。關鍵函式createnamedpipe
a.先建乙個namedpipesrv單文件應用程式,加選單「建立管道」「讀取資料」「寫入資料」
b.在view中增加handle變數hpipe,注意在析構函式中釋放它!
c.響應選單,建立命名管道
voidcnamedpipesrvview::onpipecreate()
handle hevent;
hevent=createevent(null,true,false,null);
if(!hevent)
zeromemory(&ovlap,sizeof
ovlap.hevent=hevent;
if(!connectnamedpipe(hpipe,&ovlap))
}if(wait_failed==waitforsingleobject(hevent,infinite))
closehandle(hevent);
}
voidcnamedpipesrvview::onpiperead()
messagebox(buf);}
void
cnamedpipesrvview::onpipewrite()
}
d.再建乙個namedpipeclt單文件工程,加選單「連線管道」「讀取資料」「寫入資料」,當然別忘記成員變數hpipe的定義和初始化
e.響應選單**
voidcnamedpipecltview::onpipeconnect() 連線管道
hpipe=createfile("
\\\\.\\pipe\\mypipe
",generic_read |generic_write, 0
,null,open_existing,file_attribute_normal,null);
if(invalid_handle_value==hpipe)}
void
cnamedpipecltview::onpiperead() 讀取資料
messagebox(buf);}
void
cnamedpipecltview::onpipewrite() 寫入資料
}
4.郵槽,可以跨網路通訊,使用時應將訊息長度限制在424位元組以下,關鍵函式createmailslot()
a.先建乙個mailslotsrv工程,加選單「接收資料」
b.訊息響應**:
選單「接收資料」的**
voidcmailslotsrvview::onmailslotrecv()
char buf[100
];dword dwread;
if(!readfile(hmailslot,buf,100,&dwread,null))
messagebox(buf);
closehandle(hmailslot);
}
c.加工程mailslotclt,加選單「傳送資料」
d.加訊息響應,新增**,客戶端也比較簡單。
voidcmailslotcltview::onmailslotsend() 選單「傳送資料」的**
char buf="
";dword dwwrite;
if(!writefile(hmailslot,buf,strlen(buf)+1,&dwwrite,null))
closehandle(hmailslot);
}
5. 共享記憶體(只能在本機上的程序間通訊)
6、socket通訊,可以跨網路通訊
7、以上6種方法各有優缺點:剪貼簿比較簡單。郵槽是基於廣播的,可以一對多傳送。但只能乙個傳送,乙個接收,要想同時傳送接收,須寫兩次**。
匿名管道、剪貼簿和共享記憶體只能在本機上的程序間通訊
命名管道、郵槽和socket通訊可以進行跨網路通訊。
孫鑫VC 第17章程序間的通訊
第17章 程序間的通訊 1.當乙個程序啟動後,作業系統為其分配4gb的私有位址空間。位於同乙個程序中的多個執行緒共享同乙個位址空間,因此執行緒之間的通訊非常簡單 2.四種程序間通訊方式 剪下板,匿名管道,命名管道,郵槽 3.如果某個程式已經開啟了剪貼簿,則其他應用程式將不能修改剪下板,直到前者呼叫了...
第七章 程序間通訊
第七章 程序間通訊 1 程序間通訊簡介 多個程序之間相互通訊 交換資訊的方法 方法 1 本地程序通訊 共享記憶體 訊號量 管道 命名管道 訊息佇列 2 遠端通訊 套介面 全雙工管道 2 共享記憶體和訊號量 1 共享記憶體 通過兩個或多個程序共享同一塊記憶體區域實現程序間通訊 最底層的通訊機制,最快速...
第 3 章 程序
程序是現代分時作業系統的工作單元。程序是資源分配的基本單位。執行緒是程式執行的最小單位。程序是執行的程式,這是一種非正式的說法。程序不只是程式 也稱文字段 程序還包括資料 程式計數器的值和處理器暫存器的內容等 程序堆疊 包括臨時資料,如函式引數 返回位址和區域性變數 和資料段 包括全域性變數 和堆。...