当前位置: 首页 > news >正文

window下c++共享内存,进程互斥锁。

全局文件

#ifndef DEFINE_H
#define DEFINE_H#include<QString>
#include <windows.h>
#include <iostream>
#include <string>typedef struct
{short dataType;short width;short height;}MessageData;const wchar_t *share_memory_name=L"shareMemory0";
const wchar_t *hMutex=L"DateIsReady";const int share_memory_size=1024*10;#endif // DEFINE_H

进程1

#include "mainwindow.h"#include <QApplication>
#include "Define.h"#include <windows.h>
#include <iostream>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();HANDLE hMapFile=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,share_memory_size,share_memory_name);if(hMapFile==nullptr){qDebug()<<QObject::tr("开辟内存失败");return -1;}LPVOID pBuf=MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,share_memory_size);if(pBuf==nullptr){qDebug()<<QObject::tr("映射内存失败");CloseHandle(hMapFile);return -1;}HANDLE  hmutex=CreateMutex(NULL,false,hMutex);if(hmutex==nullptr){qDebug()<<QString("lock create fail");return -1;}else{qDebug()<<QString("lock create succ");}while(1){DWORD ts=WaitForSingleObject(hmutex,INFINITE);if(ts==WAIT_OBJECT_0){MessageData data0;data0.dataType=1;data0. width=200;data0. height=230;//  ZeroMemory(pBuf,share_memory_size);memcpy(pBuf,&data0,sizeof(MessageData));Sleep(1000);ReleaseMutex(hmutex);}}return a.exec();
}

进程2

#include "mainwindow.h"#include <QApplication>#include "Define.h"#include<QString>
#include <windows.h>
#include <iostream>
#include <string>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();HANDLE hMapFile1=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,share_memory_size,share_memory_name);if(hMapFile1==nullptr){qDebug()<<QObject::tr("开辟内存失败");return -1;}LPVOID pBuf1=MapViewOfFile(hMapFile1,FILE_MAP_ALL_ACCESS,0,0,share_memory_size);if(pBuf1==nullptr){qDebug()<<QObject::tr("映射内存失败");CloseHandle(hMapFile1);return -1;}while(1){HANDLE hmutex1=OpenMutex(SYNCHRONIZE,false,hMutex);//HANDLE hmutex1=CreateMutex(NULL,false,hMutex);if(hmutex1==nullptr){qDebug()<<QObject::tr("锁失败")<<123;} else{qDebug()<<QObject::tr("锁成功")<<456;DWORD ts1=WaitForSingleObject(hmutex1,INFINITE);if(ts1==WAIT_OBJECT_0){//4.读取数据MessageData data0;memcpy(&data0,pBuf1,sizeof(MessageData));qDebug()<<"内容"<<data0.width;ReleaseMutex(hmutex1);}}}return a.exec();
}
http://www.xdnf.cn/news/1176139.html

相关文章:

  • 算法牢笼与思想飞地:在人工智能时代守卫灵魂的疆域
  • 【基于OpenCV的图像处理】图像预处理之图像色彩空间转换以及图像灰度化处理
  • 编程日常开发工具整理
  • 加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“
  • 使用JMeter进行压力测试(以黑马点评为例、详细图解)
  • [每日随题15] 前缀和 - 拓扑排序 - 树状数组
  • SpringBoot 内嵌 Tomcat 的相关配置
  • RocketMQ核心源码解读
  • 快速梳理遗留项目
  • Maven学习
  • 服务器版本信息泄露-iis返回包暴露服务器版本信息
  • 《汇编语言:基于X86处理器》第9章 复习题和练习
  • C++:list(1)list的使用
  • 性能优化:Vue 3 `v-memo` 指令详解
  • 四、cv::Mat的介绍和使用
  • FreeRTOS学习笔记之调度机制
  • Linux C: 函数
  • 2026 拼多多秋招内推码(提前批)
  • 2025年电赛--电源题赛前押题
  • 19.动态路由协议基础
  • 1. 一份“从 0 到 1” 的 WSL(Windows Subsystem for Linux)速查手册
  • 自定义类型:结构体,联合和枚举
  • (Arxiv-2025)OVIS-U1技术报告
  • 动态路由协议基础
  • vmware分配了ubuntu空间但是ubuntu没有获取
  • 226.翻转二叉树
  • 排版套料—判断矩形能否放入多边形内——cad c# 二次开发实现
  • 以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁
  • MySQL深度理解-深入理解MySQL索引底层数据结构与算法
  • Android用户鉴权实现方案深度分析