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();
}
相关推荐
故事不长丨10 小时前
C#正则表达式完全攻略:从基础到实战的全场景应用指南
开发语言·正则表达式·c#·regex
哈库纳玛塔塔10 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
你怎么知道我是队长11 小时前
C语言---typedef
c语言·c++·算法
phltxy11 小时前
从零入门JavaScript:基础语法全解析
开发语言·javascript
带土111 小时前
5. enum(枚举)关键字在C/C++中的作用
c语言·c++
天“码”行空11 小时前
java面向对象的三大特性之一多态
java·开发语言·jvm
驴友花雕12 小时前
【花雕学编程】Arduino BLDC 之群体机器人协同探索
c++·单片机·嵌入式硬件·arduino bldc·群体机器人协同探索
驴友花雕12 小时前
【花雕学编程】Arduino BLDC 之仿人机器人膝关节稳定系统
c++·单片机·嵌入式硬件·arduino bldc·仿人机器人膝关节稳定系统
Qhumaing12 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
odoo中国13 小时前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按