当前位置: 首页 > 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.lryc.cn/news/597327.html

相关文章:

  • macOS配置maven及报错处理:zsh: permission denied: mvn
  • 大厂总结常用分析问题方法之CMMI-IDEAL模型
  • VRRP技术-设备备份技术
  • Modbus TCP转Devicenet:水泥厂PLC与多类仪表的自动化通信实践
  • 学习 Flutter(五):玩安卓项目实战 - 下
  • 2025年7月一区SCI-投影迭代优化算法Projection Iterative Methods-附Matlab免费代码
  • Flutter学习笔记(四)---基础Widget
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyter’问题
  • OSPF路由协议——上
  • 2025.7.15vlan作业
  • vscode怎么安装MINGW
  • Linux下SVN常用指令
  • VRRP虚拟路由器冗余协议
  • 民营医院如何突破技术与模式创新,迎来发展机遇?
  • 14.10 《24小时单卡训练!LoRA微调LLaMA2-7B全攻略,RTX 3090轻松跑》
  • Async/Await
  • translateZ数值大小变化
  • Python 程序设计讲义(7):Python 的基本数据类型——整数类型
  • SpringMVC快速入门之请求与响应
  • JavaScript事件循环机制
  • 免费下载入户申请书,轻松办理登记手续——“文件扫描助手”网站介绍
  • 使用 piano_transcription_inference将钢琴录音转换为 MIDI
  • 开闭原则在C++中的实现
  • 基于Tornado的WebSocket实时聊天系统:从零到一构建与解析
  • 【js(5)原型与原型链】
  • 自由学习记录(72)
  • JavaEE Spring框架的概述与对比无框架下的优势
  • 大模型开发
  • 【Ansible】Ansible 管理 Elasticsearch 集群启停
  • NAPI node-addon-api 编译报错 error C1083: “napi.h”: No such file or directory