关键词: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();
}