macos Qt防止程序重复启动代码
时间: 2024-03-19 21:44:55 浏览: 77
防止程序多次运行
下面是一个简单的示例代码,演示如何使用 `QSharedMemory` 和 `QLocalServer` 类防止程序重复启动。
```cpp
#include <QApplication>
#include <QLocalServer>
#include <QLocalSocket>
#include <QSharedMemory>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 使用程序名称创建唯一的标识符
QString identifier = QString("%1-%2").arg(qApp->applicationName()).arg(qApp->applicationVersion());
// 创建共享内存
QSharedMemory sharedMemory(identifier);
bool isRunning;
// 检查共享内存中是否已经存在标记
if (sharedMemory.attach()) {
isRunning = true;
sharedMemory.detach();
} else {
// 创建本地套接字
QLocalServer localServer;
if (localServer.listen(identifier)) {
isRunning = false;
// 创建共享内存标记
sharedMemory.create(1);
} else {
isRunning = true;
}
}
if (isRunning) {
// 程序已经启动,直接退出
qDebug() << "Program already running";
return 0;
} else {
// 程序没有启动,正常运行
qDebug() << "Program starting";
return a.exec();
}
}
```
需要注意的是,由于 MacOS 的特殊性,该方法不能完全保证程序启动互斥,但可以在大多数情况下有效避免程序重复启动。
阅读全文