1. 程式人生 > >Qt防止程式多開

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;
}