QT/C++ 程序启动时检查程序是否已经启动

关键词:QT程序重复启动检查

使用场景:不建议程序被多次启动的情况:例如程序启动后连接了某些设备,而操作用户没注意到程序已经启动了,又打开了一次程序,然后出现连接被占用等问题。

代码实现:

可以在QT项目的main.cpp中实现

复制代码
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <QWidget>

bool checkSingleInstance() {
    static QSharedMemory sharedMemory;
    
    // 设置唯一的key
    sharedMemory.setKey("MyAppSingleInstanceKey");
    
    if (sharedMemory.attach()) {
        // 已经附加到现有内存,说明已有实例运行
        return false;
    }
    
    // 创建共享内存段
    if (!sharedMemory.create(1)) {
        QMessageBox::critical(nullptr, "错误", 
            "无法创建共享内存段,可能是权限问题。");
        return false;
    }
    
    // 确保程序退出时释放共享内存
    QObject::connect(qApp, &QCoreApplication::aboutToQuit, []() {
        QSharedMemory().setKey("MyAppSingleInstanceKey");
    });
    
    return true;
}

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

    //插入检查函数
    if (!checkSingleInstance()) {
        QMessageBox::warning(nullptr, "警告", "程序已经在运行中!");
        return 0;
    }
    
    // 正常启动程序
    QWidget window;
    window.show();
    
    return app.exec();
}
相关推荐
zz34572981134 分钟前
C语言基础概念7
c语言·开发语言
会开花的二叉树6 分钟前
Reactor网络库的连接管理核心:Connection类
开发语言·网络·php
凯子坚持 c8 分钟前
C++基于微服务脚手架的视频点播系统---客户端(1)
开发语言·c++·微服务
袖清暮雨8 分钟前
Python爬虫(Scrapy框架)
开发语言·爬虫·python·scrapy
CSDN_RTKLIB12 分钟前
SharedPtr测试步骤说明
c++
呱呱巨基15 分钟前
Linux 第一个系统程序 进度条
linux·c++·笔记·学习
2401_8384725117 分钟前
C++中的装饰器模式实战
开发语言·c++·算法
沐知全栈开发24 分钟前
PHP 数组
开发语言
雨季66627 分钟前
Flutter 三端应用实战:OpenHarmony “心流之泉”——在碎片洪流中,为你筑一眼专注的清泉
开发语言·前端·flutter·交互
YMWM_39 分钟前
python3中类的__call__()方法介绍
开发语言·python