进程间通讯IPC总结


1.各个IPC通讯的原理:


ipc原理1:让两个进程各自的虚拟地址对应内存上同一个物理地址!(进程空间,内存空间)
FileMapping—IPC
Point—IPC
ShareDllData—IPC
ipc原理2:利用操作系统消息队列的三种消息传递(自定义消息,系统消息,拷贝消息)
UserMsg—IPC
Msg—IPC
ipc原理3:利用其他方式(管道,邮筒)进行消息传递
NamedPipe-IPC
MailSlot-IPC



具体如下:

FileMapping-IPC
先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据。
Point-IPC
调用了两套函数:__NtWow64ReadVirtualMemory64/ReadProcessMemory来读写同一个虚拟内存
ShareDllData-IPC
设置某一块物理内存为“共享读共享写”,对其写的时候就不会触发操作系统的拷贝写。
这里是不同的进程同时加载一个动态库
UserMsg-IPC
自定义消息
Msg-IPC
自定义消息,系统消息,字符串消息:拷贝消息
NamedPipe-IPC
创建管道的过程是管道服务器。连接到管道的进程是管道客户端。
一个进程将信息写入管道,然后另一个进程从管道读取信息。


为每个管道实例创建一个事件对象,用于实现重叠IO;为每个管道实例分配一个线程,用于响应客户端的请求
MailSlot-IPC
邮筒




2.各个IPC通讯的特点:


FileMapping-IPC
Point-IPC
可以做到32位->32位,64位->64位,32位->64位的
ShareDllData-IPC
因为这里是不同的进程同时加载一个动态库,所以要求两个进程的位数必须与dll相同,即只能使32位与32位通讯,64位与64位的通讯。
UserMsg-IPC
Msg-IPC
使用了操作系统的消息队列,所以可以做到进程32位,64位通用!但是同样受限于此,只能做到四个字节(或者八个字节)的数字数据通讯!
只能发送四个字节或八个字节分别对应着使用L参(LPARAM)或是L参和W参(LPARAM,WPARAM)
NamedPipe-IPC
MailSlot-IPC
使用消息的这后四种方式都可以进行进程32位,64位通用!

这两种分别使用管道和邮筒的方式不受限与发送的数据大小。



ClipBoard-IPC剪贴板还没学尴尬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值