您的位置:首页 > 编程语言 > C语言/C++

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可以跨机器通信,自然可以支持跨进程通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: