- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
十进程间通信
第11章 进程间通信 11.1 进程间通信 11.1.1 进程间通信的基本概念 所谓信件是指进程之间相互传递的赖以发生交互作用的有结构的数据。 进程通信的一般模型,系统中的每个进程都可以使用发送/接受系统调用向其他进程发送消息以及接收来自别的进程的消息。 操作系统除了提供发送/接收俩个系统调用之外,主要的任务是完成消息的管理与传递。 消息管理的功能包括:消息打包与分解,消息队列管理,发送/接收机构管理。 信道指报文经历的通路,其具体的物理实现可能是共享的主存区域或者外存盘块,也可能是总线或电缆。 11.1.2 Windows下进程间的通信机制 IPC机制:Microsoft的API提供了应用程序之间的通信和数据共享机制,称为进程间通信。 进行通信的应用程序可分为服务器和客户. 客户:向其他进程发出请求的应用或进程 服务器:响应客户请求的应用进程 可选择的IPC机制: 11.2 窗口消息 在Windows环境中,句柄是用来标识项目的, WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。 句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。 在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备 描述表句柄),HICON(图标句柄)等等。 一个应用发送WM_COPYDATA消息传递数据到另一个应用,若发送该消息,以下列参数调用SendMessage函数 [DllImport(User32.dll,EntryPoint=SendMessage)] private static extern int SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter ref COPYDATASTRUCT lParam // second message parameter ); //使用extern 修饰符意味着方法在C# 代码的外部实现 wParam:发送数据的窗口句柄。 lParam是指向含有发送数据的COPYDATASTRUCT结构的指针。其返回值为布尔型,当接收消息的应用处理了该数据,返回true,否则返回false 发送WM_COPYDATA消息时,SendMessage函数申请到一个大小为cbData字节的内存块,并将数据从调用者的地址空间复制到该内存块中,然后向目标窗口发送该消息。接收消息的应用的窗口处理函数处理该消息时,lParam参数是一个指向接收消息的应用的地址空间中的COPYDATASTRUCT结构的指针,lpData成员是指向一个复制内存块的指针,该地址反映了该内存块在接收消息的应用的地址空间的位置。 一个应用可以用WM_COPYDATA消息向另一个应用发送数据,接收数据的应用从COPYDATASTRUCT结构中取数据,可以将发送数据的应用视为服务器,接收数据的应用视为客户,一个应用可以同时既为服务器又为客户。窗口消息的程序框图 如下: 使用WM_COPYDATA消息有个前提,直到接收消息进程的句柄,这是实现通信的关键。得到接收窗口句柄最直接的方法,就是FindWindow()函数,找窗口类或者窗口名。 例如:在发送方,程序中通过 int WINDOW_HANDLER = FindWindow(null, @“接收方窗体”);语句获得窗体句柄。 得到接收方窗体的句柄后,使用SendMessage()函数应向该进程发送WM_COPYDATA消息。 SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds); 源代码: private void button1_Click(object sender, System.EventArgs e) { //在发送方,用FindWindow找到接受方的句柄,然后向接受方发送WM_COPYDATA消息. //接受方在
您可能关注的文档
最近下载
- 马克思主义基本原理(南开大学)超星尔雅学习通网课章节测试答案.docx VIP
- 【PPT课件】2024中国慢性阻塞性肺疾病基层诊疗与管理指南解读.pptx
- 物联网安装调试员(高级)教材完整版v1.3.docx VIP
- 高考政治重难点核心知识归纳及思维导图03必修三《政治与法治》.pdf VIP
- 机车转向架新技术.ppt VIP
- 2025兵团连队职工考试试题及答案解析.doc VIP
- [中医书籍]皇汉医学丛书05伤寒论纲要.pdf VIP
- 小学道德与法治新部编版一年级上册全册教案(2024秋).doc VIP
- 宝可梦 Let's Go!皮卡丘1.02版switch大气层系统游戏修改代码.docx VIP
- 卫生专业技术人员支医工作鉴定表.pdf
文档评论(0)