- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间通信的四种方式
剪贴板
匿名管道
命名管道
邮槽
剪切板是将数据放到内存区域中,然后再取出来。
剪切板程序:(基于对话框的程序,利用剪切板进行通信的例子):
两个EDIT BOX,一个是发送数据,一个是接收数据,再放置两个按钮,一个是发送,一个是接受,当按下发送按钮,数据放到剪切板,接受按钮取出数据并显示。(可以把发送和接受的代码放到不同的进程中进行通信。)
void CClipBoardDlg::OnBtnSend() //将数据送到剪切板里面
{
// TODO: Add your control notification handler code here
if (OpenClipboard( ))
{
CString str;
EmptyClipboard();
GetDlgItemText(IDC_EDIT_SEND,str);
HANDLE hMem=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//str.GetLength()+1多分配一个空字节
char *pBuf=(char*)GlobalLock(hMem);
strcpy(pBuf,str);
GlobalUnlock(hMem);
SetClipboardData(CF_TEXT,hMem);
CloseClipboard();
}
}
void CClipBoardDlg::OnBtnRecv()
{
// TODO: Add your control notification handler code here
if (OpenClipboard( ))
{
if (IsClipboardFormatAvailable(CF_TEXT))
{
HANDLE hdata=GetClipboardData(CF_TEXT);
char *pBuf=(char*)GlobalLock(hdata);
GlobalUnlock(hdata);
SetDlgItemText(IDC_EDIT_RECV,pBuf);
CloseClipboard();
}
}
}
下面创建一个匿名管道:(匿名管道只能在父子进程间通信)
创建一个单文档的程序(父程序。Parent),写入三个菜单:创建管道,写入数据,读取数据。并在VIEW类中加上命令响应函数。
为CParentView增加
private:
HANDLE hRead;
HANDLE hWrite;
CParentView::CParentView()
{
// TODO: add construction code here
hRead=NULL;
hWrite=NULL;
}
CParentView::~CParentView()
{
if (hRead)
{
CloseHandle(hRead);
}
if (hWrite)
{
CloseHandle(hWrite);
}
}
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 若指定文件名,在当前目录下寻找可执行文件名,不会搜索,若没有找到,失败返回。不会自动加上EXE文件名。本例中的..\\Child\\Debug\\Child.exe,..是指返回到Parent的上一级目录。Parent和Child是平级.
LPTSTR lpCommandLine, // 若没加目录,自动加EXE扩展名。自动搜索。
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 当调用CreateProcess创建新进程时,系统会自动创建进程内核对象和线程内核对象(用于进程主线程)并将它们的使用计数设置为2(创建的时候本身为1,创建时打开再加1,为2,所以后面要关闭),本参数和下一个是用来设定创建的新进程和线程的安全属性,以及指定父进程将来生成的其它线程是否可以继承他们的句柄。若为NULL,为默认的安全属性。
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lp
您可能关注的文档
最近下载
- 部编人教版八年级上册道德与法治全册教学设计(配2025年秋改版教材).docx
- 关于开展招投标领域问题专项整治的实施方案.docx
- 机器人工程专业未来就业岗位及发展前景分析报告.docx VIP
- 慢性阻塞性肺疾病健康教育培训课件.pptx VIP
- 消毒记录登记表.docx VIP
- 高中英语“深度学习”策略在外语听说教学中的实践研究教学研究课题报告.docx
- 2024-2025学年小学信息技术(信息科技)四年级上册湘科版(2024)教学设计合集.docx
- (统编2024版)道德与法治三年级上册 第2课 我学习 我快乐 课件(共2课时).pptx
- 智能制造工程专业未来就业岗位及发展前景分析报告.docx VIP
- 2025年中国澳洲淡水龙虾市场调查研究报告.docx
文档评论(0)