Avere una sola istanza di un programma in Qt

Avere una sola istanza di un programma in Qt

Ho creato un piccolo programma per la mia azienda, che non deve essere lanciato più di una volta sullo stesso pc.

Questo perchè esegue diverse operazioni su database, e non è cosa buona tenere il programma aperto più volte.

Per evitare di eseguire più di una istanza di un programma in Qt, possiamo usare QSharedMemory.

Possiamo usare tutto direttamente nel main:

#include "mainwindow.h"
#include <QApplication>
#include <QSharedMemory>

int main(int argc, char *argv[]) {
    QSharedMemory mem("Cimoda");
    if (!mem.create(1)) {
        exit(0);
    }
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

In pratica a QSharedMemory passiamo una stringa che identifica il nome del programma.

Poi controlliamo se esiste con la funzione create, che in sostanza prova a scrivere nella shared memory.

Se non ci riesce, vuol dire che già "esiste" e quindi il processo si chiude.

La cosa bella è che si chiude il processo che proviamo a creare, e non quello già creato.

Quindi il programma originale non si chiuderà!

Enjoy!