Qt QSharedMemory进程间通信

1、QSharedMemory对象的创建:
(0)、 创建QSharedMemory实例对象,必须为该共享内存指定关键字,即一个名字,只有设置了关键字后,才可以执行创建create()、关联attach()等操作。

(1)、 通过构造函数QSharedMemory(const QString & key, QObject * parent = nullptr)
a、key为关键字,即为共享内存起一个名字。(我觉得此key是对应于Windows API中文件映射内核对象的名字)
b、举例:

QSharedMemory * sm = new QSharedMemory("QSharedMemoryExample");

(2)、 通过构造函数QSharedMemory(QObject * parent = nullptr)创建实例对象后,调用setKey()为该实例对象设置关键字。
a、举例:

QSharedMemory * sm = new QSharedMemory();
sm->setKey("QSharedMemoryExmple");

(3)、 QSharedMemory对象析构,会自动将进程与共享内存分离出来。

2、创建共享内存:
(0)、 bool create(int size, QSharedMemory::AccessMode mode = ReadWrite)
a、使用Key创建size大小的共享内存,并且将共享内存附加到进程上。
b、size指定共享内存的空间大小。
c、mode为访问共享内存的方式,默认是可读可写。QSharedMemory定义了两种访问方式:
-> QSharedMemory::ReadOnly 只读方式
-> QSharedMemory::ReadWrite 读写方式
d、成功返回true。失败返回false, 原因:Key标识的共享内存已经存在,此时不会执行附加操作, QSharedMemory::AlreadyExists; 没有足够的内存给开辟, QSharedMemory::OutOfResources。

(1)、 举例:

sm->create(100);

(2)、 (我觉得此步骤相当于Windows API中的CreateFileMapping)

3、关联共享内存:
(0)、 bool attach(QSharedMemory::AccessMode mode = ReadWrite)
a、尝试将进程附加到由Key标识的共享内存。
b、共享内存默认的访问方式为可读可写。
c、成功返回true。失败返回false,原因:没有找到Key标识的共享内存。

(1)、 举例:

sm->attach();

(2)、 (我觉得此步骤相当于Windows API中的MapViewOfFile)

4、分离共享内存:
(0)、 bool detach()
a、解除共享内存与进程的关联。
b、如果该共享内存被多个进程所关联,当最后一个进程和共享内存解除关联后,该共享内存将由操作系统自动释放掉。
c、分离成功返回true。分离失败返回false,原因: 该进程本身与共享内存就没有关联; 该共享内存被另一个进程锁定。
d、作为创建者,应该确定别人也不用共享内存了再解绑。

(1)、 举例:

sm->detach();

(2)、 (我觉得此步骤相当于Windows API中的UnmapOfView和CloseHandle)

5、判断共享内存的关联状态:
(0)、 bool isAttached() const
a、该函数用来判断进程是否和共享内存进行关联。
b、关联返回true。否则返回false。

(1)、 举例:bool b = sm->isAttached();

6、锁定共享内存:
(0)、 bool lock()
a、如果共享内存资源当前处于释放状态,进程调用该函数将共享内存中的资源锁定,并返回true。其它进程将不能访问该共享内存。
b、如果共享内存被其它进程占用时,则进程调用该函数会一直处于阻塞状态,直到其它进程使用完毕,释放共享内存资源。
(1)、 举例:

sm->lock();

7、解锁共享内存:
(0)、 bool unlock()
a、如果共享内存资源被当前进程所占有,调用该函数将解锁共享资源,并返回true。
b、如果当前进程没有占用该资源,或者共享内存被其它进程访问,则不做任何操作返回false。

(1)、 举例:

sm->unlock();

(2)、 为了保证共享内存中数据的完整性,当一个进程在读写共享内存的时候,其它进程不允许对该共享内存进行访问。
例如某一进程对共享内存进行读写操作之前,调用lock()锁定该共享内存,之后独享共享内存中的数据,访问共享内存完毕后,调用unlock()函数释放共享内存的使用权限。

8、获取共享内存的地址:
(0) 、
const void * constData() const;
void * data();
const void * data() const;

(1)、 进程关联共享内存的前提下,调用该函数返回共享内存中数据的起始地址。如果没有关联共享内存,则返回0。

9、获取共享内存的大小:
(0)、 int size() const

(1)、 调用该函数将返回进程所关联的共享内存的大小(字节)。如果没有关联的共享内存,则返回0。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单周期CPU电路设计

1.实验目的 本实验旨在让学生通过设计一个简单的单周期 CPU 电路,深入理解 RISC-V 指令集的子集功能实现,掌握数字电路设计与实现的基本流程,包括指令解析、部件组合、电路设计以及功能仿真等环节,同时培养verilog HDL编程能力和…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 五、 解释评估(Explanation Evaluation) 在前面的章节中,我们介绍了不同的解释技术和它们的用途&#…

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用

使用Qt中的模型视图框架

本篇文章让你能够在阅读完之后,掌握Qt的模型视图框架的大致使用方法。 问题引入 在我们开发较小的软件的时候,我们可能不会注意到模型视图框架的作用。 因为我们的同一份的数据可能只会在同一个窗口中显示,不会存在数据在一个窗口中更新&a…

跟着逻辑先生学习FPGA-实战篇第一课 6-1 LED灯闪烁实验

硬件平台:征战Pro开发板 软件平台:Vivado2018.3 仿真软件:Modelsim10.6d 文本编译器:Notepad 征战Pro开发板资料 链接:https://pan.baidu.com/s/1AIcnaGBpNLgFT8GG1yC-cA?pwdx3u8 提取码:x3u8 1 知识背景 LED,又名…

2024国城杯 Web

这四道题目Jasper大佬都做了镜像可以直接拉取进行复现 https://jaspersec.top/2024/12/16/0x12%20%E5%9B%BD%E5%9F%8E%E6%9D%AF2024%20writeup%20with%20docker/ n0ob_un4er 这道题没有复现成功, 不知道为啥上传了文件, 也在 /tmp目录下生成了sess_PHPSESSID的文件, 但是就是…

【ArcGISPro/GeoScenePro】检查多光谱影像的属性并优化其外观

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 操作 其他数据 检查影像的属性 熟悉检查您正在使用的栅格属性非常重要。

基于Docker基础与操作实战

6.1 Docker容器简介 Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0 协议开源。 Docker是一个用于开发,交付和运行应用程序的开放平台。Docker能将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可…

使用exe4j将jar转成exe、java打包exe

1、maven打包 需要配置以下插件&#xff0c;注意skip为false 插件配置中设置 <skip>true</skip> 时&#xff0c;实际上是告诉 Maven 在构建过程中跳过 spring-boot-maven-plugin 插件的执行。也就是说&#xff0c;Maven 在打包时不会将项目打包成可执行的 JAR 文…

MySQL 的事务与多版本并发控制(MVCC)的那些事

什么是事务原子性:一致性隔离性 问题1: 为什么MySQL要使用mvcc实现隔离性而不使用 锁 解决并发问题?持久性 问题2: MySQL 不是磁盘数据库吗,持久化为什么是 redo log 保证的?问题 3: redo log 储存了什么东西,持久化(崩溃恢复是怎么做的?)问题 4 : MySQL 的 bing log (二进制…

【单片机通讯协议】—— 常用的UART/I2C/SPI等通讯协议的基本原理与时序分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、通信基本知识1.1 MCU的参见外设1.2 通信的分类按基本的类型从传输方向上来分 二、UART&#xff08;串口通讯&#xff09;2.1 简介2.2 时序图分析2.3 UART的…

Ceph 手动部署(CentOS9)

#Ceph手动部署、CentOS9、squid版本、数字版本19.2.0 #部署服务:块、对象、文件 一、部署前规划 1、兼容性确认 2、资源规划 节点类型节点名称操作系统CPU/内存硬盘网络组件安装集群节点CephAdm01CentOS94U/8GOS:40G,OSD:2*100GIP1:192.169.0.9(管理&集群),IP2:…

CentOS7 解决ping:www.baidu.com 未知的名称或服务

CentOS7 解决ping&#xff1a;www.baidu.com“未知的名称或服务 在VM查看网络配置 查看虚拟网络编辑器 编辑网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33注意&#xff1a;不同机器的配置文件名可能不相同&#xff0c;通过 ip addr 命令查看 将 ONBOOT 从 no 改…

GPU 进阶笔记(二):华为昇腾 910B GPU

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 1 术语 1.1 与 NVIDIA 术语对应关系1.2 缩写2 产品与机器 2.1 GPU 产品2.2 训练机器 底座 CPU功耗操作系统2.3 性能3 实探&#xff1a;鲲鹏底座 8*910B GPU 主机 3.1 CPU3.2 网卡和网络3.3 GPU 信息 3.3…

[ICCD 2022]Towards Sparsification of Graph Neural Networks

论文网址&#xff1a;[2209.04766] Towards Sparsification of Graph Neural Networks 论文代码&#xff1a;github.com 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#…

人工智能与传统编程的主要区别是什么?

传统编程&#xff1a;开发者预先编写软件行为规则&#xff0c;代码基于程序员定义逻辑处理输入并产生确定输出&#xff0c;具有确定性、手动编写规则和结构化逻辑特点&#xff0c;如垃圾邮件分类程序基于预设关键词等规则。AI 编程&#xff1a;从数据中学习而非手动编写规则&am…

Mac电脑python多版本环境安装与切换

我当前是python3.9.6环境&#xff0c;需要使用3.9.8环境&#xff0c;通过brew安装3.9.8版本&#xff0c;然后通过pyenv切换环境 步骤 1: 安装 pyenv brew install pyenv brew install pyenv-virtualenv 步骤 2: 安装 Python 3.9.8&#xff08;使用 pyenv 安装指定版本的 Pyth…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

人工智能(AI)简史:推动新时代的科技力量

一、人工智能简介 人工智能&#xff08;AI&#xff0c;Artificial Intelligence&#xff09;是计算机科学的一个分支&#xff0c;旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法&#xff0c;包括机器学习、深度学习、自然语言处理&#xff08;NLP&a…

Github优质项目推荐(第十期)

文章目录 Github优质项目推荐&#xff08;第十期&#xff09;一、【postiz-app】&#xff0c;14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】&#xff0c;50.1k stars - AI 聊天框架三、【cobalt】&#xff0c;22.1k stars - 媒体下载器四、【build-your-own-x】…