- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
武 汉 工 程 大 学 计算机科学与工程学院 《操作系统》实验报告[Ⅰ] 专业班级 计算机工程02班 实验地点 5号机房 学生学号 指导教师 学生姓名 实验时间 2012-12-13 实验项目 创建进程及进程通信 实验类别 操作性( )验证性( )设计性( √)综合性( )其它( ) 实验目的及要求 实验目的及要求: 创建进程,实现消息通信和共享内存通信。了解进程的创建、退出和获取进程信息。掌握通过内存印象文件和管道技术实现进程通信。 成 绩 评 定 表 类 别 评 分 标 准 分值 得分 合 计 上机表现 积极出勤、遵守纪律 认真完成实验任务 30分 报告质量 程序代码规范、功能正确 填写内容完整、体现收获 70分 说明:评阅教师: 日 期: 2012 年 月 日 一、实验目的 创建进程,实现消息通信和共享内存通信。了解进程的创建、退出和获取进程信息。掌握通过内存印象文件和管道技术实现进程通信。 二、实验内容 本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。 在进程A中输入一些字符,点“利用SendMessage发送消息”按钮可将消息发到进程B。 在进程A中输入一些字符,点“写数据到内存映像文件”按钮,然后在进程B中点“从内存映像文件读数据” 按钮可收到消息。 先在进程B中点“创建管道并接收数据” 按钮,然后在进程A中输入一些字符,点“写数据到管道文件”按钮可将消息发到进程B。(重复第3步每次可发一条消息) 三、实验思想 这次试验基本思想是通过创建进程,实现进程间通信。主要通过将数据写到内存印象文件中和创建管道来实现进程通信。 用MFC创建一个父窗体程序A和一个子窗体程序B。在主窗体程序中添加一个创建子窗体的进程B按钮和一个结束这个子窗体的按钮。然后添加3个按钮,分别叫做“利用SendMessage发送消息”、“写数据到内存印象文件”、“写数据到管道文件”,通过这3种方式来实现进程A和进程B之间的通信。 四、设计分析: 首先设计好父窗体和子窗体的整体面貌。然后编写各个功能模块。对于父窗体,在“利用SendMessage发送消息”按钮的消息响应函数中,主要是利用Windows API函数CWnd::FindWindow来找到接收消息的窗体,即进程B,找到进程B后,利用这个函数返回的窗体指针的SendMessage函数来发送消息。在“写数据到内存印象文件”按钮的消息响应函数中,主要是利用函数CreateFileMapping来创建一个印象文件,这个函数返回的是这个印象文件的句柄,然后将这个句柄和要发送的消息字符串传递到函数sprintf中,就可以所要发送的消息写入印象文件,在子窗体中有个“从内存印象文件读数据”按钮,在这个按钮的消息响应函数中读取父进程所创建的印象文件中的数据就可以实现通信了。在父窗体按钮“写数据到管道文件”的消息响应函数中,不能直接将要发送的消息发送到管道文件,因为管道必须先由子进程通过函数CreateNamedPipe创建,只有待子进程创建好管道后父进程才能根据管道创建管道文件,将消息写入管道文件并及时发送给子进程。而且这个管道只能使用一次,即每次发送完消息后那个管道不能在使用了,必须再由子进程创建一个管道,父进程才能再次创建管道文件并向其中写入消息。 五、程序部分源代码: 1.“利用SendMessage发送消息”按钮中的主要代码 //找到接收消息的窗口(窗口名为Receiver) CString str=进程B; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) { COPYDATASTRUCT buf; char * s=new char[m_Msg1.GetLength()]; //m_Msg1为CString类型的变量 s=m_Msg1.GetBuffer(0); buf.cbData=strlen(s)+1; buf.lpData=s; pWnd-SendMessage(WM_COPYDATA,0,(LPARAM)buf); //传送大量数据要用WM_COPYDATA消息 } 2.创建内存映像对象主要代码 HANDLE hMapping; LPSTR lpData; hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x200,MYSHARE); if(hMapping==NULL) { AfxMessageBox(CreateFileMapping() failed.); return; }
有哪些信誉好的足球投注网站
文档评论(0)