有些应用程序只允许用户打开一个,则需要一些手段防止程序多开。
下面这个方法是通过共享内存的方式来解决的,原理:
运行主函数前先访问固定的共享内存段,看有没有被使用,没有使用就使用该内存段,并继续运行程序。
如果该共享内存段已经被使用则认为是多开的程序,直接return退出进程。
该方式只需对main.cpp稍作修改即可。
修改前:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
修改后:
#include "widget.h"
#include <QApplication>
#include <QSharedMemory>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSharedMemory shared_memory;
shared_memory.setKey(QString("666666"));//设置固定共享内存段的key值
if(shared_memory.attach()) //尝试将进程附加到该共享内存段
{
return 0;
}
if(shared_memory.create(1)) //创建1byte的共享内存段
{
Widget w;
w.show();
return a.exec();
}
return 0;
}