进程间通信方式

上传人:wt****50 文档编号:37010613 上传时间:2018-04-05 格式:DOC 页数:9 大小:482KB
返回 下载 相关 举报
进程间通信方式_第1页
第1页 / 共9页
进程间通信方式_第2页
第2页 / 共9页
进程间通信方式_第3页
第3页 / 共9页
进程间通信方式_第4页
第4页 / 共9页
进程间通信方式_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《进程间通信方式》由会员分享,可在线阅读,更多相关《进程间通信方式(9页珍藏版)》请在金锄头文库上搜索。

1、一一 利用剪贴板进行进程间通信利用剪贴板进行进程间通信void CClipboardDlg:OnBtnSend() / TODO: Add your control notification handler code here if(OpenClipboard() /打开剪贴板 EmptyClipboardEmptyClipboard(); /释放剪贴板中数据的句柄并分配剪贴板所有权给当 前窗口CString str;HANDLE hClip;char *pBuf;GetDlgItemText(IDC_EDIT_SEND,str);hClip=GlobalAllocGlobalAlloc(GM

2、EM_MOVEABLE,str.GetLength()+1); /从堆中分配 指定字节的内存pBuf=(char*)GlobalLock(hClip); /对全局内存对象加锁,并将句柄转 换为指针strcpy(pBuf,str);GlobalUnlock(hClip); /解锁SetClipboardDataSetClipboardData(CF_TEXT,hClip); /以指定的格式在剪贴板上放置数 据CloseClipboard(); /关闭剪贴板 void CClipboardDlg:OnBtnRecv() / TODO: Add your control notification h

3、andler code here if(OpenClipboard() if(IsClipboardFormatAvailableIsClipboardFormatAvailable(CF_TEXT) /检测剪贴板是否包含指定 格式的数据HANDLE hClip;hClip=GetClipboardDataGetClipboardData(CF_TEXT); /从剪贴板中获取指定格式的数据char *pBuf;pBuf=(char*)GlobalLock(hClip); /将句柄转换为地址GlobalUnlock(hClip);SetDlgItemText(IDC_EDIT_RECV,pBuf

4、);CloseClipboard(); 二二 利用匿名管道进行进程间通信利用匿名管道进行进程间通信( (匿名管道只能在父匿名管道只能在父子进程间通信子进程间通信) )父进程父进程void CParentView:OnPipeCreate() / TODO: Add your command handler code here SECURITY_ATTRIBUTES sa; sa.bInheritHandle=TRUE; sa.lpSecurityDescriptor=NULL; sa.nLength=sizeof(SECURITY_ATTRIBUTES);if(!CreatePipeCreat

5、ePipe(return; STARTUPINFO sui; ZeroMemory( sui.cb=sizeof(STARTUPINFO); sui.dwFlags=STARTF_USESTDHANDLES; sui.hStdInput=hRead; sui.hStdOutput=hWrite; sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);PROCESS_INFORMATION pi;if(!CreateProcess(“.ChildDebugChild.exe“,NULL,NULL,NULL,TRUE,0,NULL,NULL,CloseHandl

6、e(hWrite);hRead=NULL;hWrite=NULL;MessageBox(“创建子进程失败!“);return; else CloseHandle(pi.hProcess);CloseHandle(pi.hThread); void CParentView:OnPipeRead() / TODO: Add your command handler code here char buf100; DWORD dwRead; if(!ReadFileReadFile(hRead,buf,100,return; MessageBox(buf); void CParentView:OnPi

7、peWrite() / TODO: Add your command handler code here char buf=“武汉科技大学黄家湖校区“; DWORD dwWrite; if(!WriteFileWriteFile(hWrite,buf,strlen(buf)+1,return; 子进程子进程void CChildView:OnInitialUpdate() CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class hRead=GetStdHandle(STD

8、_INPUT_HANDLE); hWrite=GetStdHandle(STD_OUTPUT_HANDLE); void CChildView:OnPipeRead() / TODO: Add your command handler code here char buf100; DWORD dwRead; if(!ReadFile(hRead,buf,100,return; MessageBox(buf); void CChildView:OnPipeWrite() / TODO: Add your command handler code here char buf=“匿名管道测试程序“;

9、 DWORD dwWrite; if(!WriteFile(hWrite,buf,strlen(buf)+1,return; 三三 利用命名管道进行进程间通信利用命名管道进行进程间通信服务端进程服务端进程void CNamedPipeSrvView:OnPipeCreate() / TODO: Add your command handler code here hPipe=CreateNamedPipeCreateNamedPipe(“.pipeMyPipe“,PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,0,1,1024,1024,0,NULL); /

10、创建命名管道的实例并返回句柄 if(INVALID_HANDLE_VALUE=hPipe) MessageBox(“创建命名管道失败!“);hPipe=NULL;return; HANDLE hEvent; hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); if(!hEvent) MessageBox(“创建事件对象失败!“);CloseHandle(hPipe);hPipe=NULL;return; OVERLAPPED ovlap; ZeroMemory( ovlap.hEvent=hEvent; if(!ConnectNamedPipeConnectNa

11、medPipe(hPipe,CloseHandle(hPipe);CloseHandle(hEvent);hPipe=NULL;return; if(WAIT_FAILED=WaitForSingleObject(hEvent,INFINITE) /等待事件对象 变为有信号状态 MessageBox(“等待对象失败!“);CloseHandle(hPipe);CloseHandle(hEvent);hPipe=NULL;return; CloseHandle(hEvent); void CNamedPipeSrvView:OnPipeRead() / TODO: Add your comman

12、d handler code here char buf100; DWORD dwRead; if(!ReadFile(hPipe,buf,100,return; MessageBox(buf); void CNamedPipeSrvView:OnPipeWrite() / TODO: Add your command handler code here char buf=“武汉科技大学黄家湖校区“; DWORD dwWrite; if(!WriteFile(hPipe,buf,strlen(buf)+1,return; 客户端进程客户端进程void CNamedPipeCltView:OnP

13、ipeConnect() / TODO: Add your command handler code hereif(!WaitNamedPipeWaitNamedPipe(“.pipeMyPipe“,NMPWAIT_WAIT_FOREVER) /等待 命名管道的实例可用 MessageBox(“当前没有可利用的命名管道实例!“);return; hPipe=CreateFile(“.pipeMyPipe“,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); /打开命名管 道 if(INVA

14、LID_HANDLE_VALUE=hPipe) MessageBox(“打开命名管道失败!“);hPipe=NULL;return; void CNamedPipeCltView:OnPipeRead() / TODO: Add your command handler code here char buf100; DWORD dwRead; if(!ReadFile(hPipe,buf,100,return; MessageBox(buf); void CNamedPipeCltView:OnPipeWrite() / TODO: Add your command handler code

15、here char buf=“命名管道测试程序“; DWORD dwWrite; if(!WriteFile(hPipe,buf,strlen(buf)+1,return; 四四 利用邮槽进行进程间通信利用邮槽进行进程间通信服务端进程void CMailslotSrvView:OnMailslotRecv() / TODO: Add your command handler code here HANDLE hMailslot; hMailslot=CreateMailslotCreateMailslot(“.mailslotMyMailslot“,0,MAILSLOT_WAIT_FOREVER,NULL); /创建邮槽 if(INVALID_HANDLE_VALUE=hMailslot) MessageBox(“创建邮槽失败!“);return; char buf100; DWORD dwRead; if(!ReadFile(hMailslot,buf,100,CloseHandle(hMailslot);return; MessageBox(buf); CloseHandle(hMailslot); 客户端进程客户端进程void CMailslo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号