首页 技术 正文
技术 2022年11月20日
0 收藏 400 点赞 4,427 浏览 2152 个字
 #pragma once
#include <string>
#include <wtypes.h>
#include <map> using namespace std; #define MEMORYSIZE 102400000 //每块内存的大小 struct MemoryAddr{
string StrName;
LPVOID pBuffer;
HANDLE m_Handle;
}; class SharedMemory
{
public:
SharedMemory(void);
~SharedMemory(void);
public:
string strMapName; // 内存映射对象名称
string strComData; // 共享内存中的数据
int MemoeryNum; //开辟内存数 map<int,MemoryAddr>MemoryInfo; LPVOID Init(string MeName);
void IntPutData(string MeName,string str);
string OutPutData(string MeName);
string GetAllData();
};
 #include "StdAfx.h"
#include "SharedMemory.h" SharedMemory::SharedMemory(void)
{
MemoeryNum=;
} SharedMemory::~SharedMemory(void)
{
map<int,MemoryAddr>::iterator it; for (it=MemoryInfo.begin();it!=MemoryInfo.end();it++)
{
::UnmapViewOfFile(it->second.pBuffer);
::CloseHandle(it->second.m_Handle);
} MemoryInfo.clear();
} LPVOID SharedMemory::Init( string MeName)
{
MemoryAddr mMemoryAddr;
LPVOID pBuffer;
// 首先试图打开一个命名的内存映射文件对象
HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, , MeName.c_str()); if (NULL == hMap)
{ // 打开失败,创建之
hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,,MEMORYSIZE,MeName.c_str());
// 映射对象的一个视图,得到指向共享内存的指针,设置里面的数据
pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, , , );
}
else
{ // 打开成功,映射对象的一个视图,得到指向共享内存的指针,显示出里面的数据
pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, , , );
} mMemoryAddr.StrName=MeName.c_str();
mMemoryAddr.pBuffer=pBuffer;
mMemoryAddr.m_Handle=hMap; MemoryInfo.insert(pair<int,MemoryAddr>(MemoeryNum,mMemoryAddr)); MemoeryNum++; return pBuffer;
} void SharedMemory::IntPutData(string MeName, string str )
{
map<int,MemoryAddr>::iterator itr;
for (itr=MemoryInfo.begin();itr!=MemoryInfo.end();itr++)
{
if (MeName==itr->second.StrName)
{
strcpy((char*)itr->second.pBuffer, str.c_str());
}
}
} std::string SharedMemory::OutPutData(string MeName)
{
map<int,MemoryAddr>::iterator iter; for (iter=MemoryInfo.begin();iter!=MemoryInfo.end();iter++)
{
if (iter->second.StrName==MeName)
{
return (char*)iter->second.pBuffer;
}
}
} std::string SharedMemory::GetAllData()
{
string str="";
map<int,MemoryAddr>::iterator ir;
for (ir=MemoryInfo.begin();ir!=MemoryInfo.end();ir++)
{
string strTemp="";
strTemp.append(ir->second.StrName);
strTemp.append(":");
strTemp.append((char*)ir->second.pBuffer);
str.append(strTemp.c_str());
str.append(",");
}
return str;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,944
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,469
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,283
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,099
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,729
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,766