C++进程共享数据封装成类实例

 更新时间:2014年10月15日 16:04:59   投稿:shichen2014  
这篇文章主要介绍了C++进程共享数据封装成类的方法,以实例形式讲述了其封装代码与具体用法,具有一定的实用价值,需要的朋友可以参考下

本文实例讲述了C++进程共享数据封装成类的方法,分享给大家供大家参考。具体方法如下:

ShareMemory.cpp源文件如下:

复制代码 代码如下:
#include "ShareMemory.h" 
 
CShareMemory::CShareMemory(const    char* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL) 

    if (bServer) //是服务端,就创建 
    { 
        m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 0, nFileSize, pszMapName); 
    } 
    else //否则就打开 
    { 
        m_hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName); 
    } 
    //把它映射到内存 
    m_pBuffer = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); 

 
CShareMemory::~CShareMemory(void) 

    ::UnmapViewOfFile(m_pBuffer); 
    ::CloseHandle(m_hFileMap); 
}

ShareMemory.h头文件如下:

复制代码 代码如下:
#pragma once 
#include <Windows.h> 
 
class CShareMemory 

public: 
    CShareMemory(const  char* pszMapName, int nFileSize=0, BOOL bServer=FALSE); 
    ~CShareMemory(void); 
    //属性 
    LPVOID GetBuffer() const  
    { 
        return m_pBuffer; 
    } 
 
    //实现 
private: 
    HANDLE m_hFileMap; 
    LPVOID m_pBuffer; 
};

使用时用法如下:

服务端:

复制代码 代码如下:
#include "ShareMemory.h" 
int main(int argc, char *argv[]) 

 
    //进程间内存共享 
    LPCTSTR lpName= "hello"; 
    LPCTSTR lpContent = "123456"; 
    CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE); 
    LPVOID lpBase = pShareMemory->GetBuffer(); 
    strcpy((char*)lpBase, lpContent); 
     
    printf("%s\n",(char*)pShareMemory->GetBuffer()); 
    getchar(); 
    return 0; 
}

客户端:

复制代码 代码如下:
#include "ShareMemory.h" 
int main(int argc, char *argv[]) 

 
    //进程间内存共享 
    LPCTSTR lpName= "hello"; 
    LPCTSTR lpContent = "123456"; 
    CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE); 
 
    printf("%s\n",(char*)pShareMemory->GetBuffer()); 
    getchar(); 
    return 0; 
}

希望本文所述对大家的C++程序设计有所帮助。

相关文章

  • C++实现有向图邻接表的构建

    C++实现有向图邻接表的构建

    这篇文章主要为大家详细介绍了C++实现有向图邻接表的构建,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C标准库<assert.h>的实现详解

    C标准库<assert.h>的实现详解

    这篇文章主要介绍了C标准库<assert.h>的实现,主要包括了<assert.h>的基本概念、实现及用法等,需要的朋友可以参考下
    2014-09-09
  • C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

    C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

    这篇文章主要介绍了C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C++中stringstream的用法和实例

    C++中stringstream的用法和实例

    下面小编就为大家带来一篇C++中stringstream的用法和实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C语言程序的编译与预处理详解

    C语言程序的编译与预处理详解

    这篇文章主要介绍了C语言程序的编译与预处理,包括介绍了C和C++混合编程的情况,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • C++11中std::future的具体使用方法

    C++11中std::future的具体使用方法

    这篇文章主要介绍了C++11中std::future的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • c++中八大排序算法

    c++中八大排序算法

    本篇文章主要介绍了八大排序算法,详细的介绍了八个算法思想,实现代码,稳定性,时间复杂度等,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • 详解如何在VS2019和VScode中配置C++调用python接口

    详解如何在VS2019和VScode中配置C++调用python接口

    这篇文章主要介绍了详解如何在VS2019和VScode中配置C++调用python接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 简单了解C语言中直接插入排序与直接选择排序实现

    简单了解C语言中直接插入排序与直接选择排序实现

    这篇文章主要介绍了C语言中直接插入排序与直接选择排序实现,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,需要的朋友可以参考下
    2016-03-03
  • Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    这篇文章主要介绍了Windows10配置VSCode C++环境(超详细,面向小白以及大佬们),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论