博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows共享内存示例
阅读量:2194 次
发布时间:2019-05-02

本文共 2325 字,大约阅读时间需要 7 分钟。

开发环境:window 10 Qt5.13.1

windows下的进程间通信有多种方式,管道,无名管道,共享内存,消息,Socket等,但不的方式使用的场景不同,如现在有一个场景是,程序A(C++语言)调用程序B(C语言)时时获取程序B的进度,如果用管道读取一个进度就退出了,使用起来不方便,而共享内存可以时时读取放在共享内存上的进度时,操作起来也比较方便,使用的API有三个,如下:

CreateFileMapping()//创建共享内存

MapViewOfFile()//将共享内存映射到进程的地址空间

OpenFileMapping()//打开共享内存

代码示例如下:

服务端,读取数据:

#include 
#include
int createSharedMemory(){ TCHAR szName[] = TEXT("Global\\Position"); LPVOID pBuffer;//共享内存指针 //1.创建共享内存 HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, szName); if(NULL == hMapFile) { qDebug() << "Create file mapping object failed=======" << GetLastError(); return -1; } //2.获取与共享内存映射的指针 pBuffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); //3.循环读取数据 int index = 0; while(1) { qDebug() << "read data ======" << QString((char *)pBuffer) << ++index; Sleep(1000); } UnmapViewOfFile(pBuffer); CloseHandle(hMapFile); hMapFile = NULL; return 0;}int main(){ int aa = createSharedMemory(); printf("Hello World! aa ===============%d\n", aa); return 0;}

 

客户端,写数据:

#include 
#include
int createSharedMemory(){ TCHAR szName[] = TEXT("Global\\Position"); LPVOID pBuffer;//共享内存指针 //1.打开共享内存 HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, szName); if(NULL == hMapFile) { printf("open file mapping object failed=======%d\n", GetLastError()); return -1; } //2.获取与共享内存映射的指针 pBuffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); //3.循环读取数据 int a = 0; while(1) { char szName[16]; sprintf(szName, "sharemap=%d", ++a); strncpy(pBuffer, szName, strlen(szName)); printf("write data ======%s\n", (char *)pBuffer); Sleep(1000); } UnmapViewOfFile(pBuffer); CloseHandle(hMapFile); hMapFile = NULL; return 0;}int main(){ int aa = createSharedMemory(); printf("Hello World! aa ===============%d\n", aa); return 0;}

 

服务端也可以写数据,客户端也可以读数据,修改一些代码即可实现

 

参考文档:

https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memoryhttps://blog.csdn.net/stpeace/article/details/39534361https://blog.csdn.net/u013052326/article/details/76359588https://www.cnblogs.com/dongsheng/p/4460944.html

update:2020-03-28

你可能感兴趣的文章
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
机器学习算法应用中常用技巧-2
查看>>
通过一个kaggle实例学习解决机器学习问题
查看>>
决策树的python实现
查看>>