From 5c8c1509c879d049173ee11811f76f418606b450 Mon Sep 17 00:00:00 2001 From: Hane Date: Thu, 24 Aug 2023 20:23:24 +0200 Subject: [PATCH] poc prevent duplicate instances --- qtest.pro | 2 +- src/qtestmain.cpp | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/qtest.pro b/qtest.pro index c96012e..8e3d0d0 100644 --- a/qtest.pro +++ b/qtest.pro @@ -5,7 +5,7 @@ QMAKE_LFLAGS += --target=x86_64-w64-mingw32 -g -Wl,-pdb= -v DEFINES += DEBUG CONFIG += debug console -QT += widgets +QT += widgets network INCLUDEPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont" DESTPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont" VPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont" diff --git a/src/qtestmain.cpp b/src/qtestmain.cpp index 22d5e9f..3b37996 100644 --- a/src/qtestmain.cpp +++ b/src/qtestmain.cpp @@ -5,8 +5,11 @@ //#define QTBLESSED #include -#include +#include +#include +#include +#include //#include "contclasses.h" #include "qtclasses.h" #include "global.h" @@ -18,9 +21,29 @@ QApplication* createApplication(int &argc, char *argv[]) return new QApplication(argc, argv); } +bool isSingleInstanceRunning(QString appName) { + QLocalSocket socket; + socket.connectToServer(appName); + bool isOpen = socket.isOpen(); + socket.close(); + return isOpen; +} + +QLocalServer* startSingleInstanceServer(QString appName) { + QLocalServer* server = new QLocalServer; + server->setSocketOptions(QLocalServer::WorldAccessOption); + server->listen(appName); + return server; +} int main (int argc, char* argv[]) { //QApplication::setStyle("windowsvista"); + //Check if running + //https://stackoverflow.com/questions/48060989/qt-show-application-if-currently-running + if (!isSingleInstanceRunning("Mixer")) + startSingleInstanceServer("Mixer"); + else exit(0); + //INIT CONT log_debugcpp("main init"); osh->reloadEndpointHandlers();