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();
}
相关推荐
fqbqrr7 小时前
2606C++,C++构的多态
开发语言·c++
biter down7 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
小欣加油7 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
Yolo_TvT8 小时前
C++:析构函数
c++
threelab9 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
武器大师729 小时前
lv_binding_js 代码解读
开发语言·javascript·ecmascript
不知名的老吴9 小时前
线程的生命周期之线程“插队“
java·开发语言·python
Hello:CodeWorld10 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
kaikaile199510 小时前
数字全息图处理系统(C# 实现)
开发语言·c#