windows c++共享内存
#include <iostream>
#include <Windows.h>
#include <string>
int main() {
const wchar_t* mapName = L"Local\\MySharedMemory";
const size_t buffSize = 256;
//创建共享内存对象 得到一个内核句柄handle
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
buffSize,
mapName);
if (hMapFile == NULL)
{
int code = GetLastError();
return 0;
}
//将内核对象映射到内存地址
void* pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, buffSize);
if (pBuf == NULL) {
CloseHandle(hMapFile);
return 0;
}
//向共享内存写入数据
int index = 0;
while (1) {
memset(pBuf, 0, buffSize);
std::string message = "hello world writer process "+std::to_string(index);
memcpy(pBuf, message.c_str(), message.size() + 1);
index++;
Sleep(1000);
}
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
#include <iostream>
#include <Windows.h>
#include <string>
int main()
{
const wchar_t* mapName = L"Local\\MySharedMemory";
const size_t buffSize = 256;
//打开一个共享内存的映射对象
HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, mapName);
if (hMapFile == NULL)
{
return -1;
}
void* pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, buffSize);
if (pBuf == NULL)
{
CloseHandle(hMapFile);
return -1;
}
while (1) {
char message[buffSize]{ 0 };
memcpy(message, pBuf, buffSize - 1);
std::cout << message << std::endl;
Sleep(1000);
}
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
windows c++共享内存的更多相关文章
- windows 下共享内存使用方法示例
windows下共享内存使用方法较 linux 而言微微复杂 示例实现的功能 有一个视频文件,一块内存区域 : 程序 A,将该视频写入该内存区域 : 程序 B,从该内存区域读取该视频 : 代码模块实现 ...
- 利用windows api共享内存通讯
主要涉及CreateFile,CreateFileMapping,GetLastError,MapViewOfFile,sprintf,OpenFileMapping,CreateProcess Cr ...
- C++ windows下共享内存
转载:https://blog.csdn.net/tojohnonly/article/details/70246965 共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows ...
- Windows进程间通信--共享内存映射文件(FileMapping)--VS2012下发送和接收
之前以为两个互不相关的程序a.exe b.exe通信就只能通过网络,人家说可以通过发消息,我还深以为不然,对此,我表示万分惭愧. 之前课本上说的进程间通信,有共享内存.管道等之类的,但没有自己操刀写过 ...
- Windows 进程间通信 共享内存
向内存中写数据 1 // SharedMemorySample_write_main.cpp 2 #include <SDKDDKVer.h> 3 #include <Windows ...
- windows的共享内存
https://blog.csdn.net/stpeace/article/details/39534361
- Boost:shared_memory_object --- 共享内存
什么是共享内存 共享内存是最快速的进程间通信机制.操作系统在几个进程的地址空间上映射一段内存,然后这几个进程可以在不需要调用操作系统函数的情况下在那段内存上进行读/写操作.但是,在进程读写共享内存时, ...
- Windows进程通信 -- 共享内存(1)
共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 W ...
- Windows共享内存示例
共享内存主要是通过映射机制实现的. Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的.所谓的重叠是指同一块内存区域可能被多个进程同时使用.当调用 CreateFileMapp ...
- [转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
http://blog.csdn.net/stpeace/article/details/39534361 进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享外存/文件”的方法. 那么, 在本文中 ...
随机推荐
- 2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸
2024-12-21:从魔法师身上吸取的最大能量.用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列.每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量. 你被施加了一种诅咒,吸 ...
- arch 音频处显示没有输入或输出设备
我的设备是 Dell G15 5511, 属于比较新的设备, 查看了 Fourm 与 wiki 后使用 1 yay -S sof-firmware 安装框架之后重启即可使用.
- 【Mybatis-Plus进阶学习(八)】SQL注入器
使用SQL注入器就可以自定义例如selectById的默认方法. 实现步骤Step1:创建定义方法的类:Step2:创建注入器:Step3:在Mapper中加入自定义方法. 自定义注入器的简单使用 第 ...
- 重拾 iptables
iptables 是一个常看常忘的命令,本文试图从应用的角度理解它 iptables 是运行在用户空间的应用软件,通过控制 Linux 内核 netfilter 模块,来管理网络数据包的处理和转发 一 ...
- Qt开发经验小技巧156-160
Qt的UI界面在resize以后有个BUG,悬停样式没有取消掉,需要主动模拟鼠标动一下. void frmMain::on_btnMenu_Max_clicked() { ...... //最大化以后 ...
- Qt开源作品16-通用无边框拖动拉伸
一.前言 相信各位CS结构开发的程序员,多多少少都遇到过需要美化界面的事情,一般都不会采用系统的标题栏,这样就需要无边框标题栏窗体,默认的话无边框的标题栏都不支持拉伸和拖动的,毕竟去掉了标题栏则意味着 ...
- [转]vue:引入外部cdn报错 ‘XXX is not defined’ 及事件处理办法
框架:vue-cli(vue脚手架) 例:以cdn引入腾讯防水墙为例 前因:在html的head中引入外部cdn链接, 在vue文件中直接使用,如图: 结果:如图报错. 解决办法: 1. 在index ...
- Bolt.new 30秒做了一个网站,还能自动部署,难道要吊打 Cursor?
大家好,我是汤师爷~ 这篇聊聊 Bolt.new 和 Cursor 的对比. Bolt.new 是一款基于 SaaS 的 AI 编码平台.它由 LLM 驱动的智能体作为底层,并结合 WebContai ...
- biancheng-socket编程
http://c.biancheng.net/socket/ 网络编程就是编写程序使两台联网的计算机相互交换数据.这就是全部内容了吗?是的!网络编程要比想象中的简单许多.那么,这两台计算机之间用什么传 ...
- Java线程池实现原理与源码解析(jdk1.8)
为什么需要线程池?线程池能够对线程进行统一分配,调优和监控:- 降低资源消耗(线程无限制地创建,然后使用完毕后销毁)- 提高响应速度(无须创建线程)- 提高线程的可管理性 Java是如何实现和管理线程 ...