Qt实现防止程序多次运行
单例化
可以通过QSharedMemory的特性实现应用程序单例化。
共享内存不能重复创建(Create)
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSharedMemory sharedMemory("App.exe");
if (sharedMemory.create(1))
{
return a.exec();
}
else
{
qDebug()<<"Software is running!";
QMessageBox::information(0, "Clue", "Software is running!");
}
}
或者
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSharedMemory *sharedMemory = new QSharedMemory(QString("App.exe"));
if (sharedMemory->create(1))
{
return a.exec();
}
else
{
qDebug()<<"Software is running!";
QMessageBox::information(0, "Clue", "Software is running!");
}
delete sharedMemory;
sharedMemory = NULL;
}
共享内存未创建不能Attach
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <QDebug>
int main(int argc, char *argv[])
{
QSharedMemory shared("App.exe");
if(shared.attach(QSharedMemory::ReadOnly))//利用attach无法绑定未申请内存空间的特点判断该应用程序是否唯一
{
return 0;//结束程序运行
}
shared.create(1);//创建共享内存,空间大小为1字节
QApplication a(argc, argv);
return a.exec();
}