当前位置: 首页 > 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.dtcms.com/a/295082.html

相关文章:

  • 前端跨域请求原理及实践
  • 一二章笔记总结
  • CSP-J系列【2024】P11229 [CSP-J 2024] 小木棍题解
  • 1688官方跨境寻源通API接口调用实战
  • LLM指纹底层技术——混合专家模型
  • CSP-J系列【2023】P9750 [CSP-J 2023] 一元二次方程题解
  • SSH 一键互信配置脚本 V2.0 使用指南
  • 卡尔曼滤波数据融合
  • AI 及开发领域动态与资源汇总(2025年7月23日)
  • 【LeetCode】算法详解#9 ---旋转图像
  • QT开发---基础介绍及环境搭建
  • STM32中SystemCoreClockUpdate函数解读
  • 双写缓冲区 Redo Log
  • 基于GitHub的Terraform自动化管理最佳实践
  • 多服务器批量发布软件
  • Linux编程:9、线程编程-互斥锁与条件变量
  • 扫地机产品的电池CQC认证遵循哪个标准?
  • 1. 一份“从 0 到 1” 的 WSL(Windows Subsystem for Linux)速查手册
  • J2EE模式---视图助手模式
  • ospf多区域
  • git的使用,推送仓库github
  • Hierarchical-Localization 安装与常见问题解决手册
  • MSTP多生成树协议
  • 【西北工业大学公开课】导引系统原理(全61讲)周军 -个人笔记版 5000字
  • 基于多种机器学习的水质污染及安全预测分析系统的设计与实现【随机森林、XGBoost、LightGBM、SMOTE、贝叶斯优化】
  • Parasoft为金融服务打造统一测试平台,提升安全、合规与交付效率
  • Shell函数
  • 无人设备遥控器之无线网络技术篇
  • Linux 一文详谈Vim编辑器的使用
  • 面试150 最大子数组和