【Qt学习】10 利用QSharedMemory实现单例运行

news2024/11/23 6:59:30

问题

让应用程序只有一个运行实例
QSharedMemory除了可以完成进程间通信,还可以实现应用程序单例化。

解法


首先,看看QSharedMemory的几个函数:

1、QSharedMemory(const QString &key, QObject *parent = Q_NULLPTR)构造函数

该构造函数为给定的parent指针构造共享内存对象,并以key作为该对象的键值。

2、bool create(int size, AccessMode mode = ReadWrite) 函数

该函数为标识了键值key的共享内存对象创建内存空间。size是向系统申请的内存空间大小(即字节数),存取方式mode 默认为ReadWrite。

3、bool attach(AccessMode mode = ReadWrite) 函数

该函数将进程和标识了键值key的共享内存进行绑定。如果未调用create申请共享内存空间,则无法调用attach进行绑定。返回false。

方法一、利用共享内存不能重复Create。

代码如下。

#include "mainwindow.h"
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSharedMemory *sharedMemory = new QSharedMemory(QString("Single.exe"));

    if (sharedMemory->create(1))
    {
        MainWindow w;
        w.show();
        return a.exec();
    }
    else
    {
        qDebug()<<"Has running";
        QMessageBox::information(0, "提示", "程序已运行!");
    }

    delete sharedMemory;
    sharedMemory = NULL;
}

效果:

​​​​​​​

方法二、未创建共享内存,不能Attach。

#include <QApplication>
#include <QSharedMemory>
int main(int argc, char *argv[])
{
    //通过共享内存,让程序只产生一个运行实例
    QSharedMemory shared("MainWindow.exe");//该共享内存键值为MainWindow.exe
    if(shared.attach(QSharedMemory::ReadOnly))//利用attach无法绑定未申请内存空间的特点判断该应用程序是否唯一
    {
        return 0;//非唯一,结束程序运行
    }
    shared.create(1);//创建共享内存,空间大小为1字节

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

参考:

https://blog.csdn.net/qq_42113801/article/details/113957610

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

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

相关文章

Ceph的纠删码特性 EC(Erasure Code)代码流程

从GitHub上Clone Ceph项目&#xff0c;我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一、EC&#xff08;Erasure Code&#xff09;是什么&#xff1f; Ceph的纠删码特性EC&#xff1a;将写入的数据分成N份原始数据&#xff0c;通过这N份原始数据计算出M份效验…

html2canvas 截图空白 或出现toDataURL‘ on ‘HTMLCanvasElement或img标签没截下来 的所有解决办法

1.如果截图空白&#xff1a; 1.1以下的参数是必须要有的。 width: shareContent.offsetWidth, //设置canvas尺寸与所截图尺寸相同&#xff0c;防止白边height: shareContent.offsetHeight, //防止白边logging: true,useCORS: true,x:0,y:0,2&#xff0c;如果出现了报错 toData…

go gin gorm连接postgres postgis输出geojson

go gin gorm连接postgres postgis输出geojson 1. 技术环境 go-gin-gorm postgres-postgis 2. 简单实现代码 思路就是&#xff1a;采用原生sql实现查询、更新等&#xff0c;采用gorm的raw来执行sql语句 package mainimport ("fmt""net/http""github.…

23HW-0Day(漏洞检测Tools)V1.7—批量漏洞检测

工具更新一、 更新如下漏洞利用&#xff1a; 1、用友移动管理系统appmanager文件上传 2、用友移动管理系统category文件上传 3、用友U8CRM文件上传 4、用友U8CRM文件读取 5、用友U8-Cloud文件上传 6、致远OAM1移动协同软件命令执行 工具更新二、 本次更新&#xff0c;工具支…

游戏测试和软件测试有什么区别?

针对手游而言&#xff0c;游戏测试的本质是APP&#xff0c;所以不少手游的测试方式与APP测试异曲同工&#xff0c;然而也有所不同。APP更多的是具有一种工具&#xff0c;一款APP好不好用不重要&#xff0c;关键点在于实用。而游戏则具有一种玩具属性&#xff0c;它并不见得实用…

基于mike平原河网水动力学模块建模教程

Mike 11是在河流模拟中应用非常广泛的优秀软件&#xff0c;在洪水演进、实时洪水预报、水库和水工建筑物优化调度、水工建筑物设计、桥梁的水力设计、溃坝过程模拟、河流泥沙输移和河道演变、河流及湿地的生态及水质评估、水污染对流和扩散、突发日常水质污染事故预警方面得到了…

像linux 一样清理Windows C盘

像 linux 有命令 du -sh 查看文件夹大小 但是windows 可就没有这个命令了&#xff0c;就算有命令&#xff0c;也不能扫描子目录里面的文件 但是windows 可以借助 软件来清理&#xff0c;和linux 一样 文件上面是目录&#xff0c;下面是文件所占用空间大小的图&#xff0c;咋…

【ES6】Promise.race的用法

Promise.race()方法同样是将多个 Promise 实例&#xff0c;包装成一个新的 Promise 实例。 const p Promise.race([p1, p2, p3]);上面代码中&#xff0c;只要p1、p2、p3之中有一个实例率先改变状态&#xff0c;p的状态就跟着改变。那个率先改变的 Promise 实例的返回值&#…

算法——排序

排序 下面的代码会用到宏定义&#xff0c;因为再C中没有swap交换函数&#xff0c;所以对于swap的宏定义代码如下&#xff1a; #define swap(a, b) {\__typeof(a) __a a; a b; b __a;\ } 稳定排序&#xff1a; 1.插入排序&#xff1a; 插入排序会将数组&#xff0c;分位两个部…

RS485/RS422 收发器(SIT3485和SIT3485E)

SIT3485 是一款 3.3V 供电、半双工、低功耗&#xff0c;功能完全满足 TIA/EIA-485 标准要求的 RS-485 收发器。 SIT3485 包括一个驱动器和一个接收器&#xff0c;两者均可独立使能与关闭。当两者均禁用时&#xff0c;驱动 器与接收器均输出高阻态。 SIT3485 具有 1…

手把手教你打造自己的AI聊天机器人程序(讯飞星火API)

案例背景 最近发现科大的讯飞星火大模型可以申请API试用了&#xff0c;我一直想用chatgpt的API&#xff0c;一是因为收费买不起&#xff0c;二是因为网络不方便..... 现在有了科大讯飞这个国内免费的&#xff0c;当然要试试。 目前讯飞星火可以申请试用他们的模型API&#x…

影视文化交流:如何通过Netflix了解和欣赏全球不同的影视文化

Netflix成立于1997年,是一家美国的在线流媒体平台。自推出以来,Netflix迅速发展壮大,目前已经成为全球领先的影视内容提供商之一。截至2022年底,Netflix在全球范围内拥有超过2.07亿的付费订阅用户,遍布190多个国家和地区。通过其便捷的平台和丰富的内容库,Netflix为全球观众带来…

Python怎么解决版本兼容性的问题? - 易智编译EaseEditing

Python的版本兼容性问题是在不同Python版本之间代码能否正常运行的问题。由于Python的语言和库在不同版本之间可能存在细微的差异&#xff0c;因此编写能够在多个Python版本上运行的代码是很重要的。 以下是一些解决Python版本兼容性问题的方法&#xff1a; 使用合适的语法&a…

R语言入门——line和lines的区别

目录 0 引言一、 line()二、 lines() 0 引言 首先&#xff0c;从直观上看&#xff0c;lines比line多了一个s&#xff0c;但它们还是有很大的区别的&#xff0c;下面将具体解释这个两个函数的区别。 一、 line() 从R语言的帮助文档中找到&#xff0c;line()的使用&#xff0c…

JS小知识点:在定义对象的时候,用变量值作为对象属性名

有没有一种情况&#xff0c;在定义一个对象时&#xff0c;对象的属性名由一个变量的值来决定的&#xff1f;而且是一步到位&#xff0c;简单实现的&#xff1f; 我们知道对象有时被称为关联数组&#xff0c;访问对象属性值的时候可以使用括号表示法&#xff08;比如 objectNam…

揭秘ChatGPT,如何打造自己的自定义指令 | 京东云技术团队

一、ChatGPT-0720更新 又在深夜&#xff0c;正要打开ChatGPT官网测试下pdf对话功能&#xff0c;发现ChatGPT又有更新。本次更新总结有2点&#xff1a; 1.对于Plus用户&#xff0c;GPT-4的使用限额从25条/3h提升至50条&#xff08;整整提升1倍~ $20的订阅费又更超值了&#xf…

成集云 | 飞书审批同步金蝶云星空 | 解决方案

源系统成集云目标系统 方案介绍 飞书员工报销审批通过后&#xff0c;审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台&#xff0c;将即时沟通、日历、云文档、云盘和工作台深度整合&#xff0c;通过开放兼容的平台&#xff0c;…

小白学Go基础01-Go 语言的介绍

Go 语言对传统的面向对象开发进行了重新思考&#xff0c;并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵服务器上的所有核心&#xff0c;而且它编译大型项目的速度也很快。 用 Go 解决现代编程难题 Go 语言开发团队花了很长时间来解决当今软件开发人员…

C位运算做标识位使用

C位运算做标识位使用

【重要】为什么串行NAND Flash不支持XiP?

并行/串行NOR Flash都支持XIP&#xff0c;但是串行NAND Flash不支持。 今天给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP。 在嵌入式世界里&#xff0c;当我们提起XiP设备&#xff08;支持代码原地执行的存储器&#xff09;&#xff0c;首先想到的应…