首页 > 编程语言 >Qt防止程序重复运行

Qt防止程序重复运行

时间:2023-07-05 22:12:23浏览次数:45  
标签:文件 Qt 重复 lock 程序 博客 进程 ID

1.使用共享内存的方法

 弊端:使用共享内存方式,当第二个进程启动时,判断内存区数据是否建立,如有,则退出; 这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动。

参考:qt之 使程序只运行一个实例,若再次点击exe则将已运行的实例置在最顶层显示_大桶矿泉水的博客-CSDN博客

 

2.使用全局互斥变量的方法

 

参考:QT之防止程序重复运行方法_qt防止程序重复运行_m沉默01的博客-CSDN博客

 

其他参考: C++ QT PC端 防止程序重复启动的几种方式_防止进程重复启动的方法_漫步繁华街的博客-CSDN博客 讲到了使用QT中的 QLockFile:

QLockFile 使用文件提供在不同的进程间的锁。锁文件可以放置多个进程同时访问同一资源。例如磁盘上的配置文件、套接字、端口、共享内存区域等。使用的时候trylock()对资源进行上锁。当程序运行的时候,上锁成功后,会自动生成文件(例如生成的是磁盘上的文件),文件中包含进程ID, 进程名称,当前用户名这三个信息。

正常退出时,lock文件会被自动删除。如果程序崩溃,lock文件还会继续存在,当然也会继续阻止进程启动。

由于这个原因,QFileLock尝试去lock的时候,会首先根据写入文件的进程ID,去查找进程里所有的进程ID。如果没有文件中的进程ID,则认为lock文件已过期,并重新lock成功。

如果恰巧所有的进程里,刚好有这个进程ID,这时候就会把记录lock文件里的进程名称进行比较。

如果进程名也相同,则上锁失败,启动进程失败。如果只是进程ID相同,但进程名不同,还是会认为lock文件已经过期。可以加锁。

此外,QLockFile还考虑了锁文件最后修改时间(默认30秒)。如果发现锁文件已经过期,则删除。

这么看下来,好像程序崩溃不影响再次启动程序。改天试一下。

标签:文件,Qt,重复,lock,程序,博客,进程,ID
From: https://www.cnblogs.com/littleheadache/p/17530036.html

相关文章

  • python: PyCharm 2023.1打包项目成执行程序
        IDE最底部:pyinstaller-iheart.ico-Dmain.py     ......
  • 小程序两层循环
    <viewwx:for="{{projectList}}"wx:key="index"class="list"bindtap="detail"data-id="{{item.project_id}}"><viewclass="flow_status_name_list"wx:for="{{item.classify_list}}&q......
  • Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
    https://blog.csdn.net/qq_21438461/article/details/130764349Linux系统编程C/C++以及Qt中的零拷贝技术:从底层原理到高级应用一、零拷贝技术的概念与价值(Zero-CopyConceptandValue)1.1什么是零拷贝(WhatisZero-Copy)1.2为什么我们需要零拷贝(WhyWeNeedZero-C......
  • 2023,程序员的出路在哪里?
    哪些工作会被AI取代?ChatGPT和专家们给出了相似答案根据世界经济论坛的《 2020年未来工作报告》,预计到2025年人工智能将在全球范围内取代8500万个工作岗位未来10年,可能被人工智能取代的一些工作包括电话推销员、簿记员、薪酬和福利经理、接待员、快递员、工厂工人、投资分析......
  • 如何在qt中使用gdal?
    首先是使用MinGW编译的GDAL库,这种貌似比较少见。。可见大家都还是喜欢用vs来编译https://zhuanlan.zhihu.com/p/355864559参考:https://blog.csdn.net/qq_32629895/article/details/105738977(介绍一种简单的在QT(MinGW)中使用gdal的方法)......
  • 中国程序员数量达755万,全球排名第二。
    要了解全球程序员的情况,GitHub是一个不错的窗口。我们依据GitHub发布的《Octoverse2021年度报告》,来了解开发者世界的状态,尤其是中国程序员的情况。依据GitHub的数据,2021年中国有755万程序员,排名全球第二。放眼全球,程序员数量已经超过7300万,比2020年增长了1700万。全球程序......
  • 基于DirectX11+ImGui的Win32桌面程序开发
    一、常见图形界面框架(DirectUI、GUI)1.题外话,纯属扯O举两个常用的开发框架,MFC和QtWidget里面每个控件都是Window,这是和DirectUI最大的区别。下面简单梳理下这个DirectUI与GUI之前错综复杂的爱恨情仇:1.在侏罗纪时期,传统的Handle式GUI框架,是由操作系统内核(win32k.sys)直......
  • QT 记Sqlite用法
    一、在.pro文件添加QT+=coreguisql二、头文件#include<QSqlDatabase>#include<QSqlError>#include<QSqlQuery> 三、用法1//以写的查询为例2QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");34db.setDatabaseNa......
  • 美团特供IDEA入门实战笔记CSDN显踪,竟无良程序员白嫖后举报下架
    今天给大家带来的是:黄文毅,罗军老师著的 《IntelliJIDEA入门与实战》 黄文毅,罗军是谁?黄文毅,CSDN博客专家,架构师。先后就职于厦门星耀蓝图、厦门美图、上海美团等公司。主要从事Java开发工作,具有丰富的软件开发经验,熟悉Java、高并发、分布式及相关的软件架构。出版《分布式......
  • QT 记串口的用法
    QSerialPort用法一、在.pro文件添加serialportQT+=coreguiserialport二、头文件#include<QSerialPort>#include<QSerialPortInfo>三、开启串口1voidWidget::on_pushButton_clicked()//自己写的按钮为例2{3QSerialPortInfoinfo;4QLis......