C++使用共享内存

C++使用共享内存

共享内存类

#pragma once
#include <iostream>
#include <Windows.h>class ShareMem
{
public:ShareMem(){pBuf = NULL;}~ShareMem(){if (pBuf != NULL){UnmapViewOfFile(pBuf);}CloseHandle(hMapFile);}void SetMemName(char* name){m_name = name;}int WriteMem(void* arg, int len){hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,   // 使用物理内存NULL,                   // 默认安全级别PAGE_READWRITE,         // 可读可写0,                      // 高位文件大小1024,                   // 低位文件大小TEXT(m_name));   // 共享内存名称if (hMapFile == NULL){std::cout << "CreateFileMapping failed, error code: " << GetLastError() << std::endl;return -1;}pBuf = (char*)MapViewOfFile(hMapFile,               // 共享内存句柄FILE_MAP_ALL_ACCESS,    // 可读可写0,0,1024);                  // 共享内存大小if (pBuf == NULL){std::cout << "MapViewOfFile failed, error code: " << GetLastError() << std::endl;return -1;}CopyMemory((PVOID)pBuf, arg, len);std::cout << "Write data to shared memory successfully!" << std::endl;return 0;}int readMem(void* readBuf, int len){hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,    // 可读可写FALSE,                  // 不继承句柄TEXT(m_name));   // 共享内存名称pBuf = (char*)MapViewOfFile(hMapFile,               // 共享内存句柄FILE_MAP_ALL_ACCESS,    // 可读可写0,0,1024);                  // 共享内存大小if (pBuf != NULL){readBuf = pBuf;std::cout << "Read data from shared memory: " << (char*)pBuf << std::endl;}return 0;}private:HANDLE hMapFile;char* pBuf;char* m_name;
};

使用示例-写入数据程序

#include "ShareMem.h"
int main()
{ShareMem sh;sh.SetMemName("hello_world");char buf[512] = "hello world aaaabbbbccccdddd";sh.WriteMem(buf, 512);system("pause");return 0;
}

使用示例-读取数据程序

#include "ShareMem.h"
int main()
{ShareMem sh;sh.SetMemName("hello_world");while (1){buf[512];sh.readMem(buf, 512);Sleep(1000);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python封装执行cmd命令的方法

一、前置说明 在自动化时&#xff0c;经常需要使用命令行工具与系统进行交互&#xff0c;因此可以使用python封装一个执行cmd命令的方法。 二、代码实现 import subprocess import timefrom common.exception import RunCMDError from common.logger import loggerclass Cmd…

STM32储存器和总线构架

一、引言 本篇文章旨在介绍STM32小容量、中容量和大容量的储存器和系统构架&#xff0c;文中涉及到一些专有名词和概念较为抽象和陌生&#xff0c;建议读者能够查阅相关资料和知识加深了解。 二、正文 &#xff08;一&#xff09;、系统构架 在小容量、中容量和 大容量产品中…

常用数据库的分页语句(mySlq、oracle、PostgreSQL、SQL Server)

目录 ORACLE MySQL PostgreSQL SQL Server ORACLE SELECT * FROM (SELECT t.*, ROWNUM AS rnFROM (SELECT * FROM 表名 ORDER BY 排序字段) tWHERE ROWNUM < 结束行数 ) WHERE rn > 开始行数; 其中&#xff0c;表名是你要查询的表名&#xff0c;排序字段是你希望按…

在qemu平台使用gdb调试程序

1、使用gdb在qemu上调试程序 1.1、第一步&#xff1a;在qemu上运行程序并开启gdb server qemu-system-riscv64 -nographic -machine virt -m 128M -smp 1 -kernel …/bin/test.elf -s -S 1.2、第二步&#xff1a;使用gdb客户端连接gdb server -x&#xff1a;指定gdb的配置文件…

jmeter 压测需要的部分配置

修改jmeter 目录的bin目录下的jmeter.properties文件 解除KeepAlive设置 修改接口的高级中的实现和超时 解除httpclient4.retrycount前的注释符并将0修改为1 即修改为&#xff1a;httpclient4.retrycount1 解除httpclient4.idletimeout前的注释符并修改为合适间隔 即修改为…

创建型模式之工厂方法模式

一、概述 1、工厂方法模式&#xff1a;定义一个用于创建对象的接口&#xff0c;让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类 2、工厂方法模式&#xff1a;不再提供一个按钮工厂类来统一负责所有产品的创建&#xff0c;而是将具体的按钮创建过程交…

电子电工企业品牌网站建设的作用是什么

电子电工企业在市场中有较高的需求度&#xff0c;比如电子元件、电子产品等&#xff0c;这些都属于高信任度产品&#xff0c;对需求方来说&#xff0c;需要查看商家全部信息、包括资质、产品/服务内容、案例等&#xff0c;因此对电子电工企业来讲&#xff0c;需要贯通品牌路径&…

解决RuntimeError: CUDA error: invalid device ordinal

步骤 首先查看自己设备的cuda版本 #如下linux指令都可以&#xff0c;主要还是以nvidia-smi为主 nvidia-smi nvcc -V用的python版本是3.8 torch版本用的1.12.1cu113 torch网址&#xff1a;https://pytorch.org/get-started/previous-versions/ 安装完后发现出现如下问题&#…

前端路由钩子的神奇之处:你真的了解它们吗?(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

MySQL按序批量操作大量数据

MySQL按序批量操作大量数据&#xff08;Java、springboot、mybatisplus、ElasticSearch&#xff09; 以同步全量MySQL数据到ElasticSearch为例。 核心代码 业务逻辑&#xff1a; public boolean syncToElasticsearch() {log.info("Starting data synchronization to El…

第13节:Vue3 声明反应状态ref()

下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用声明反应状态ref()&#xff1a; vue复制代码<template> <view> <text>{{ message }}</text> <button click"changeMessage">点击改变文本</button> </v…

CSS 基础

文章目录 CSS 常见的属性CSS 常见样式行内样式内嵌样式导入样式 CSS 选择器标签选择器id选择器类选择器全局选择器属性选择器组合选择器 CSS 常见应用表格列表导航栏下拉菜单提示工具图片廊 CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用…

数据库连接池Druid

在 Spring Boot 项目中&#xff0c;数据库连接池已经成为标配&#xff0c;然而&#xff0c;我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。 在这篇文章中&#xff0c;我们将探讨数据库连接池&#xff0c;深入解析其实现机…

Arthas 排查JAVA应用问题 —— 筑梦之路

简介 Arthas 是阿里开源的一款 Java 应用诊断工具&#xff0c;可以在线排查问题&#xff0c;动态跟踪 Java 代码&#xff0c;以及实时监控 JVM 状态。 官方网站&#xff1a;arthas 快速入门 1. 下载 wget https://arthas.aliyun.com/arthas-boot.jar 2. 运行 需要在运行…

【细说Java内部类】

系列文章目录 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 一、为什么需要内部类&#xff1f; 1.内部类的作用 2.内部类的使用场景 二、内部类的分类 1.成员内部类&#xff08;实例内部类&#xff09; 2.静态内部类 3.局部内部类 4.匿名内部类 总结 前…

ES如何提高准确率之【term-centric】

提高准确率的方法有很多&#xff0c;但是要在提高准确率的同时保证召回率往往比较困难&#xff0c;本文只介绍一种比较常见的情况。 问题场景 我们经常搜索内容&#xff0c;往往不止针对某个字段进行搜索&#xff0c;比如&#xff1a;标题、内容&#xff0c;往往都是一起搜索…

【卡塔尔世界杯数据可视化与新闻展示】

卡塔尔世界杯数据可视化与新闻展示 前言数据获取与处理可视化页面搭建功能实现新闻信息显示详情查看登录注册评论信息管理 创新点结语 前言 随着卡塔尔世界杯的临近&#xff0c;对于足球爱好者来说&#xff0c;对比赛的数据分析和新闻报道将成为关注的焦点。本文将介绍如何使用…

openmediavault debian linux安装配置企业私有网盘(三 )——raid5与btrfs文件系统无损原数据扩容

一、适用环境 1、企业自有物理专业服务器&#xff0c;一些敏感数据不外流时&#xff0c;使用openmediavault自建NAS系统&#xff1b; 2、在虚拟化环境中自建NAS系统&#xff0c;用于内网办公&#xff0c;或出差外网办公时&#xff0c;企业内的文件共享&#xff1b; 3、虚拟化环…

jmeter配置使用(mac)

前言 这篇文件就是一个笔记&#xff0c;非mac用户不用看了&#xff0c;我这是换了mac&#xff0c;要用jmeter的倒腾。 一、下载 二、使用步骤 1.解压 tgz格式的直接用tar命令就行 tar -zxvf 包名2.启动 一种是进入解压包的bin目录启动 这种方式启动的就是命令框不能关闭&am…

正则表达式详解

什么是正则表达式 正则表达式&#xff0c;又称规则表达式&#xff0c;通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个"规则字符串…