进程间通信的11种方法

进程间通信有以下方法
 
Using named objects
Waiting for multiple objects
Waiting in a message loop
Using mutex objects
Using semaphore objects
Using event objects
Using critical section objects
Using timer queues
Using waitable timer objects
CreateFileMapping
我觉得还是用 event 比较方便
 
 
 
 
进程间的通讯实现( IPC )的 11 种方法
 
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
另一个是地址空间,它包含所有的可执行模块或 DLL 模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。
为了能在两个进程之间进行通讯,由以下几种方法可供参考:
0 。剪贴板 Clipboard: 16 位时代常使用的方式, CWnd 中提供支持
1 。窗口消息 标准的 Windows 消息以及专用的 WM_COPYDATA 消息 SENDMESSAGE() 接收端必须有一个窗口
2 。使用共享内存方式( Shared Memory)
a. 设定一块共享内存区域
HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)
产生一个 file-mapping 核心对象
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAcess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
得到共享内存的指针
b. 找出共享内存
决定这块内存要以点对点( peer to peer) 的形式呈现
每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
都应该调用 CreateFileMapping(), 然后调用 GetLastError(). 如果传回的
错误代码是 ERROR_ALREADY_EXISTS, 那么进程就可以假设这一共享内存区 域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第 一位,并接下来将共享内存初始化。
还是要使用 client/server 架构中
只有 server 进程才应该产生并初始化共享内存。所有的进程都应该使用
HANDLE OpenFileMapping(DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName);
再调用 MapViewOfFile(), 取得共享内存的指针
c. 同步处理 (Mutex)
d. 清理 (Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
CloseHandle()
3 。动态数据交换( DDE )通过维护全局分配内存使的应用程序间传递成为可能
其方式是再一块全局内存中手工放置大量的数据,然后使用窗口消息传递内存 指针 . 这是 16 WIN 时代使用的方式,因为在 WIN32 下已经没有全局和局部内存 了,现在的内存只有一种就是虚存。
4 。消息管道 (Message Pipe)
用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序
访问一个平面文件一样读写数据。
匿名管道 (Anonymous Pipes)
单向流动,并且只能够在同一电脑上的各个进程之间流动。
命名管道 (Named Pipes)
双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格 式,而使用 ReadFile() 只能读取该大小的倍数。
可以被使用于 I/O Completion Ports
5 邮件槽 (Mailslots)
广播式通信 , 32 系统中提供的新方法,可以在不同主机间交换数据,在 WIN9X 下只支持邮件槽客户
6 Windows 套接字 (Windows Socket)
它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应 用程序之间可以互相通信。
7 Internet 通信 它让应用程序从 Internet 地址上载或下载文件
8 RPC :远程过程调用,很少使用,因其与 UNIX RPC 不兼容。
9 。串行 / 并行通信 (Serial/Parallel Communication)
它允许应用程序通过串行或并行端口与其他的应用程序通信
10 COM/DCOM
通过 COM 系统的代理存根方式进行进程间数据交换,但只能够表现在对接口 函数的调用时传送数据,通过 DCOM 可以在不同主机间传送数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值