C++技术问题总结-第2篇 进程通信
2014-08-06 14:31
288 查看
进程通信的方法
进程通信基本方法有如下几种。
1、消息传递机制。
2、共享内存。
3、管道和邮槽。
4、剪贴板。
5、Socket通信。
1.消息传递机制
使用WM_COPYDATA实现进程间的传递数据。
函数原型
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
参数
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。
其中lParam是一个结构指针。
typedef struct tagCOPYDATASTRUCT {
DWORD dwData; //数据标识
DWORD cbData; //数据大小
PVOID lpData; //具体数据
} COPYDATASTRUCT;
2.共享内存
原理:一个进程创建内存映射,可以在多个进程中使用,这些进程共享一块内存。
对应API。
创建:HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE|SEC_COMMIT, 0, DEF_DATA_SIZE, “shareMemSample”);
映射共享:lpData=MapViewOfFile(hMapFile, FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
关闭共享:UnmapViewOfFile(lpData); CloseHandle(hMapFile);
打开共享内存:
hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, “shareMemSample”);
lpBase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
3.管道和邮槽
主要分为匿名管道、命名管道和邮槽。
1、匿名管道:基于字符和单向的。CreatePipe。
2、命名管道:双向的,面向字节流。CreateNamedPipe、ConnectNamedPipe。
3、邮槽:单通道通信。CreateMailslot。
4.剪贴板
基本机制:由系统预留的一块全局共享内存,可用于被各进程暂时存储数据。
主要API:OpenClipboard、EmptyClipboard、GetClipboardData、SetClipboardData、CloseClipboard。
5.Socket通信
Socket可以跨机器通信,自然可以支持跨进程通信。
进程通信基本方法有如下几种。
1、消息传递机制。
2、共享内存。
3、管道和邮槽。
4、剪贴板。
5、Socket通信。
1.消息传递机制
使用WM_COPYDATA实现进程间的传递数据。
函数原型
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
参数
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。
其中lParam是一个结构指针。
typedef struct tagCOPYDATASTRUCT {
DWORD dwData; //数据标识
DWORD cbData; //数据大小
PVOID lpData; //具体数据
} COPYDATASTRUCT;
2.共享内存
原理:一个进程创建内存映射,可以在多个进程中使用,这些进程共享一块内存。
对应API。
创建:HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE|SEC_COMMIT, 0, DEF_DATA_SIZE, “shareMemSample”);
映射共享:lpData=MapViewOfFile(hMapFile, FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
关闭共享:UnmapViewOfFile(lpData); CloseHandle(hMapFile);
打开共享内存:
hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, “shareMemSample”);
lpBase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
3.管道和邮槽
主要分为匿名管道、命名管道和邮槽。
1、匿名管道:基于字符和单向的。CreatePipe。
2、命名管道:双向的,面向字节流。CreateNamedPipe、ConnectNamedPipe。
3、邮槽:单通道通信。CreateMailslot。
4.剪贴板
基本机制:由系统预留的一块全局共享内存,可用于被各进程暂时存储数据。
主要API:OpenClipboard、EmptyClipboard、GetClipboardData、SetClipboardData、CloseClipboard。
5.Socket通信
Socket可以跨机器通信,自然可以支持跨进程通信。
相关文章推荐
- C++技术问题总结-第11篇 网络通信中主机序网络序
- C++技术问题总结-第11篇 网络通信中主机序网络序
- C++技术问题总结-第3篇 线程同步
- C++技术问题总结-第1篇 内存布局
- C++技术问题总结map、vector、list、deque各自的使用场合
- C++技术问题总结-第0篇 类型转换
- C++技术问题总结-第4篇 TCP与UDP
- C++技术问题总结-第12篇 设计模式原则
- C++技术问题总结-第8篇 STL内存池是怎么实现的
- C++技术问题总结-第14篇 常用设计模式及其应用场景
- C++技术问题总结-第10篇 MFC中SendMessage与PostMessage异同
- C++技术问题总结-第0篇 类型转换
- C++技术问题总结-第6篇 STL迭代器相关
- C++技术问题总结-第8篇 STL内存池是怎么实现的
- HBase 异步查询导致的死锁和zookeeper通信中断问题追踪与总结[非技术]
- C++学习,总结二(模拟鼠标键盘操作和进程之间的通信)
- 近距离通信技术存在的安全问题总结
- C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合
- C++技术问题总结-第9篇 智能指针
- C++技术问题总结-第5篇 TCP三次握手