Qt防止程序多开

有些应用程序只允许用户打开一个,则需要一些手段防止程序多开。

下面这个方法是通过共享内存的方式来解决的,原理:

运行主函数前先访问固定的共享内存段,看有没有被使用,没有使用就使用该内存段,并继续运行程序。

如果该共享内存段已经被使用则认为是多开的程序,直接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;
}

猜你喜欢

转载自blog.csdn.net/fangye945a/article/details/84981641