MFC:通过代码简单理解进程间的通讯机制——共享内存

本文通过代码示例介绍了如何在Windows环境下使用MFC实现进程间通信(IPC)的共享内存机制。首先,文章阐述了共享内存的基本概念,解释了为什么需要共享内存以及其工作原理。接着,详细讲解了发送方(服务器)和接收方(客户端)的创建过程,包括创建文件映射、映射文件到内存以及读写数据的步骤。最后,强调了使用共享内存时需要注意的事项,例如进程必须同时运行才能交换数据,并指出共享内存常用于存放结构体数组以共享复杂数据结构。
摘要由CSDN通过智能技术生成

下面用共享映射文件的方式实现进程间通信,代码可以运行。

一、浅理解

每个进程有自己独立的空间,一个进程无法访问其他进程的数据。就好像两个是互不干涉的个体,想让它们进行通信(交换数据),就必须有一段它们都可以访问到的空间,作为中间介质。在计算机中,可以存放数据的地方分为内存和硬盘,进程是运行着的程序,肯定在内存当中。为让进程A和进程B进行通信,它们都可以访问的空间可以是

  • 内存中它们以外的区域
  • 硬盘中的区域

内存文件映射是将硬盘中的一个文件映射到内存中,进程A,B都可以访问该内存(文件),达到交换数据的目的。如右图是给用户的直接感觉,两个进程操作同一个物理文件,通过文件的读写,交换数据。

在这里插入图片描述
在这里插入图片描述

二、发送方(服务器)

个人理解,虽然共享内存都可以读写,也没有服务器和客户端的概念。但是,需要有一方创建这个文件,而另一方只需要获取并打开这个文件。为了方便,将创建文件的一方称作服务器,而获取并打开文件的一方称为客户端。而事实上,服务器或者客户端都可以对文件进行读写,类似于网络编程中的客户端和服务器都可以发消息接消息。自己写的服务器端C++代码如下

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#pragma warning(disable:4996)
int_tmain(intargc, _TCHAR* argv[]){
	HANDLEhFile =CreateFile(TEXT("c:\zj.dat"),GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	if(hFile==NULL){
		printf("create file error!");
		return0;
	}
	// HANDLE hFile = (HANDLE)0xffffffff; //创建一个进程间共享的对象
	HANDLEh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值