共享内存封装类

本文介绍一个共享内存封装类,使共享内存的使用更简单化,特别适合更懒的程序员使用:-)

一、实现目标:简单化使用共享内存

二、使用说明:

1. 创建共享内存CSFMServer对象, 需要为CSFMServer对象指定专用的名字,只要

系统中存在一个这样的对象,就可以在其他程序中简单方便地使用该共享内存。

CSFMServer(char *szFileName, char *szMapName, DWORD dwSize);
Create(char *szFileName, char *szMapName, DWORD dwSize);

参数1:NULL或指定的文件(将创建或打开并读写/麻烦)

参数2:要创建的共享内存对象名

参数3:要创建的共享内存对象大小

例如

m_SFMS.Create(NULL, "_ZZZ_OBJ_", 1);

2. 本地使用共享内存

使用 LPVOID GetBuffer() 返回共享内存地址,例如

char *p = (char*)m_SFMS.GetBuffer();
if (p)
  strcpy(p, "1234567890");

3. 创建共享内存CSFMClient对象,也需要为CSFMClient对象指定专用的名字(上一步使用的那个),即可使用共享内存。

CSFMClient(DWORD dwAccess, char *szMapName);
Open(DWORD dwAccess, char *szMapName);

参数1:共享内存对象访问方式(FILE_MAP_READ|FILE_MAP_WRITE)

参数2:共享内存对象名

例如:

CSFMClient *pCSFMC = new CSFMClient(FILE_MAP_READ, "_OBJ_ZZZ_");

4. 本地使用共享内存

使用 LPVOID GetBuffer() 返回共享内存地址,例如

char *p = (char*)pCSFMC->GetBuffer();
if (p) strcpy(p, "1234567890");

时间: 2024-11-02 14:29:55

共享内存封装类的相关文章

我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办??

问题描述 我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办?? 共享内存映射,flushviewoffile,更新磁盘文件(那个flushviewoffile 返回都是对的可是文件里就是没有东西) 解决方案 先看i数据是否正确接收了,有没有写入共享内存.

android 匿名共享内存ashmem_create_region函数有没有对应的释放函数

问题描述 android 匿名共享内存ashmem_create_region函数有没有对应的释放函数 RT,ashmem_create_region 函数对应的release函数?且不释放会不会影响系统性能? 解决方案 ashmem_create_region返回的是一个文件句柄fd,所以关闭就采用文件关闭函数close就好了. 解决方案二: ashmem_unpin_region(fd, 0, 0);

在驱动和应用程序间共享内存

在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存.两种最容易的技术是:    l 应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存.(应用程序分配共享内存)    l 由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序.(驱动程序分配共享内存)    使用IOCTL共享Buffer:    使用一个IOCT描述的Buffer,在驱动和用户程序间共享内存是内存共享最简单的实现形式.毕竟,IOCTL也

如何用C++编写一个服务器和用户之间的共享内存管理程序

问题描述 如何用C++编写一个服务器和用户之间的共享内存管理程序 主要的功能就是建立一个服务器,新建两个容器,一个用来存放用户的ID(对应内存),插入操作之后遍历,看是否插入成功:一个用于服务器存放这些ID:在用户插入成功后服务器将他拷贝到这里,然后遍历,看是否插入成功:然后出现查内存进行标记. 要用到stl,共享内存,多线程这块. 请各位大大给点意见啊,谢谢.:) 完美解决的小弟会意思意思的. 解决方案 这些信息都可以放到服务器,用STL的map等来维护 解决方案二: 首先你要定义一个服务器与

PHP 直接在共享内存中存储数据集

共享内存是一种在相同机器中的应用程序之间交换数据的有效方式.一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限.每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指向一个物理内存区域,其他进程可在该区域操作它.创建并提供了合适的权限之后,同一台机器中的其他进程就可以操作这些内存段:读取.写入和删除. 这表明使用 C 语言编写的应用程序可与使用其他语言(比如 Java 或 PHP)编写的应用程序共享信息.它们都可以共享信息,只要它们可访问和理解该信息.共享内存在针对大

Linux下C编程:共享内存通信实例

共享内存是LUNIX 系统中最底层的通信机制,也是最快速的通信机制.共享内存通过两个或多个进程共享同一块内存区域来实现进程间的通信.通常是由一个进程创建一块共享 内存区域,然后多个进程可以对其进行访问,一个进程将要传出的数据存放到共享内存中,另一个或多个进程则直接从共享内存中读取数据.因此这种通信方式是最高效的进程间通信方式.但实际的问题在于,当两个或多个进程使用共享内存进行通信时,同步问题的解决显得尤为重要,否则就会造成因不同进程同时读写一块共享内存中的数据而发生混乱.在通常的情况下,通过使用

在Windows Vista系统中实现显卡共享内存

有Windows vista下显卡的显存问题一直困扰着我.我的显卡是NVIDIA Geforce 7300LE独立显卡, 64MB显存,系统共享之后319MB.不过感觉319MB不是很够用,总想再多加点,于是今天特别查查资料看看 . 独立显卡 这里,我以自己所用的NVIDIA Geforce 7300LE独立显卡为例.之前我安装的是512MB内存,其中显卡 共享显存64MB. 图 后来我安装了两根512MB内存,其中显卡共享显存255MB.然后我在网络上搜索到同样是NV显卡别的显 卡,当512M

UNIX环境高级编程:System V 共享内存区

共享内存区域是被多个进程共享的一部分物理内存.如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中.但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址. 共享内存的实现,分为两个步骤: a. 创建共享内存,使用 shmget 函数. b.

Linux进程间通信学习:如何使用共享内存

下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式.不同进程之间共享的内存通常安排为同一段物理内存.进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样.而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程. 特别提醒:共