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();
}
相关推荐
weixin_307779132 分钟前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins6 分钟前
c++新增頭文件
c++
Shadow(⊙o⊙)16 分钟前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
爱读书的小胖18 分钟前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿22 分钟前
【项目】【在线判题系统】b端题目增删改
开发语言·python
by2099926 分钟前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Lhappy嘻嘻27 分钟前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
音草1 小时前
C++ 继承详解:从概念到菱形继承
c++
weixin_307779131 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿1 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言