没有合适的资源?快使用搜索试试~ 我知道了~
《VC++深入详解》第17章 进程间通信
需积分: 10 12 下载量 100 浏览量
2008-11-06
11:58:58
上传
评论
收藏 79KB DOC 举报
温馨提示
试读
14页
详细讲解进程间通讯的四种方式:剪贴板、匿名管道、命名管道和邮槽。并比较分析这几种进程间通信的优点和缺点。
资源推荐
资源详情
资源评论
进程间通信
本章结构
一、剪贴板
1、数据发送
2、数据接收
二、匿名管道
1、基础知识
2、进程的创建
3、父进程的实现
(1)创建匿名管道
(2)读取数据
(3)写入数据
4、子进程的实现
(1)获取管道的读取和写入句柄
(2)读取数据
(3)写入数据
三、命名管道
1、基础知识
2、服务器端程序
(1)创建命名管道
(2)读取数据
(3)写入数据
3、客户端程序
(1)连接命名管道
(2)读取数据
(3)写入数据
四、油槽
1、服务器端程序
2、客户端程序
知识要点
1、进程间通信的四种方式:剪贴板、匿名管道、命名管道和油槽。
2、延迟提交技术的相关知识:
(1)当一个提供数据的进程创建了剪贴板数据之后,直到其他进程获取剪贴板数据之前,这
些数据都要占据内存空间。如果在剪贴板上放置的数据过大,就会浪费内存空间,降低对
资源的利用率。为了避免这种浪费,就可以采取延迟提交技术,也就是由数据提供进程先
提供一个指定格式的空剪贴板数据块,即把 SetClipboardData 函数的 hMem 参数设置为
NULL 。 当 需 要 获 取 数 据 的 进 程 想 要 从 剪 贴 板 上 得 到 数 据 时 , 操 作 系 统 会 发 送
WM_RENDERFORMAT 消息,而数据提供进程可以响应这个消息,并在此消息的响应函
数中,再一次调用 SetClipboardData 函数,将实际的数据放到剪贴板上。当再次调用
SetClipboardData 函 数 时 , 就 不 再 需 要 调 用 OpenClipboard 函 数 , 也 不 再 需 要 调 用
EmptyClipboard 函数。
(2)也就是说,为了提高资源利用率,避免浪费内存空间,可以采取延迟提交技术。第一次
调用 SetClipboardData 函数时,将其 hMen 参数设置为 NULL,在剪贴板上以指定的剪贴板
格式放置一个空剪贴板数据块。然后直到有其他进程需要数据或者自身进程需要终止运行
时再次调用 SetClipboardData 函数,这时才真正提交数据。
3、在把数据放置到剪贴板之后,一定要记得调用 CloseClipboard 函数关闭剪贴板,否则其
他进程将无法打开剪贴板。
4、匿名管道是一个未命名的单向管道,通常用来在一个父进程和一个子进程之间传输数据。
匿名管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。
5、命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节。我们在不了
解网络协议的情况下,也可以利用命名管道来实现进程间的通信。
6、命名管道不仅可以在本机上实现两个进程间的通信,还可以跨网络实现两个进程间的通
信。
7、命名管道充分利用了 Windows NT 和 Windows 2000 内建的安全机制。
8、将命名管道作为一种网络编程方案时,它实际上建立了一个客户机/服务器通信体系,
并在其中可靠地传输数据。
9、命名管道是围绕 Windows 文件系统设计的一种机制,采用“命名管道文件系统(Named
Pipe File System,NPFS)”接口,因此,客户机和服务器可利用标准的 Win32 文件系统函数
(例如:ReadFile 和 WriteFile)来进行数据的收发。
10、命名管道服务器和客户机的区别在于:服务器是唯一一个有权创建命名管道的进程,
也只有它才能接受管道客户机的连接请求。而客户机只能同一个现成的命名管道服务器建
立连接。
11、命名管道服务器只能在 Windows NT 或 Windows 2000 上创建,所以,我们无法在两台
Windows 95 或 Windows 98 计算机之间利用管道进行通信。不过,客户机可以是 Windows
95 或 Windows 98 计算机,与 Windows NT 或 Windows 2000 计算机进行连接通信。
12、命名管道提供了两种基本通信模式:字节模式和消息模式。在字节模式中,数据以一
个连续的字节流的形式,在客户机和服务器之间流动。而在消息模式中,客户机和服务器
则通过一系列不连续的数据单位,进行数据的收发,每次在管道上发出了一条消息后,它
必须作为一条完整的消息读入。
13、对同一个命名管道的实例来说,在某个时刻,它只能和一个客户端进行通信。
14、利用 C 语言编程时,如果想要指定两个反斜杠,那么在代码中就需要输入四个反斜杠。
15、邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。邮槽是一
种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写入数据。
16、为保证邮槽在各种 Windows 平台下都能够正常工作,我们传输消息的时候,应将消息
的长度限制在 424 字节以下。
17、邮槽是基于广播通信的,也就是说,邮槽可以实现一对多的单向通信。
MSDN
1、CWnd::OpenClipboard 函数【MFC】
(1)功能
开打剪贴板。
(2)语法
BOOL OpenClipboard( );
(3)返回
返回值 描述
非 0 值 成功打开剪贴板
0
其他程序或当前窗口已经打开了剪贴板
(4)备注
如果某个程序已经打开了剪贴板,则其他应用程序将不能修改剪贴板,直到前者调用
了 CloseClipboard 函数。并且只有调用了 EmptyClipboard 函数之后,打开剪贴板的当前窗
剩余13页未读,继续阅读
资源评论
YBear2008
- 粉丝: 1
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功