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();
}
相关推荐
2601_962071575 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
淡海水6 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero6 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-7 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设9 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e10 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
问天_观心10 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长10 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
dong_junshuai10 小时前
每天一个开源项目#87 fmt:24.5K Stars 的 C++ 格式化核心
c++·开源·github
大丑哥11 小时前
QT QML 中实现高亮功能
qt