From ddb5f4b76e1d2c76e18bcbf5234268c08e990c14 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 5 Feb 2026 10:16:06 +0300 Subject: [PATCH] =?UTF-8?q?refact.=20=D0=9F=D0=BE=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProgramServerMTD/main.cpp | 64 +++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/ProgramServerMTD/main.cpp b/ProgramServerMTD/main.cpp index 5a75809..d76eb05 100644 --- a/ProgramServerMTD/main.cpp +++ b/ProgramServerMTD/main.cpp @@ -2,26 +2,40 @@ #include #include + #include "specialmessagebox.h" +bool appIsRunningAlready(QSharedMemory& sharedMemory); QString getLanguageFromSettings(); + int main(int argc, char *argv[]) { QApplication a(argc, argv); - // Уникальное имя для идентификации процесса const QString sharedMemKey = "ServerMTD_sharedMemKey"; // Создание объекта общей памяти QSharedMemory sharedMemory(sharedMemKey); + if(appIsRunningAlready(sharedMemory)) + {//Приложение уже запущено + return 1; + } + + MainWindow w; + w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее! + return a.exec(); +} + + +bool appIsRunningAlready(QSharedMemory& sharedMemory) +{ // Попытка прикрепления к существующему сегменту - bool isRunningAlready = false; if (sharedMemory.attach(QSharedMemory::ReadWrite)) { - qWarning() << "App ServerMTD is running already!"; + qWarning() << "Application is running already!"; QTranslator qtLanguageTranslator; QString language; @@ -29,29 +43,35 @@ int main(int argc, char *argv[]) if(language == "RUS") qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", "."); qApp->installTranslator(&qtLanguageTranslator); - SpecMsgBox::CriticalClose(nullptr, QObject::tr("App ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!")); - isRunningAlready = true; - } else + SpecMsgBox::CriticalClose(nullptr, QObject::tr("Application ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!")); + + return true; + } + else { // Приложения ещё нет, создаём сегмент памяти if (!sharedMemory.create(1)) { - qCritical() << "Error create shared memory!"; - return 1; + qCritical() << "Application launch error! Error create shared memory."; + + QTranslator qtLanguageTranslator; + QString language; + language = getLanguageFromSettings(); + if(language == "RUS") + qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", "."); + qApp->installTranslator(&qtLanguageTranslator); + SpecMsgBox::CriticalClose(nullptr, QObject::tr("Application ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" launch error! ") + QObject::tr(" Error create shared memory.") + + QObject::tr(" Contact your system administrator.")); + + return true; } } - if (isRunningAlready) - return 1; - // Освобождаем общую память при завершении работы приложения QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&]() { sharedMemory.detach(); }); - - MainWindow w; - w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее! - return a.exec(); + return false; } QString getLanguageFromSettings() @@ -62,13 +82,14 @@ QString getLanguageFromSettings() QXmlStreamReader xmlReader(&file); - while (!xmlReader.atEnd()){ - - if(xmlReader.isStartElement()){ - + while (!xmlReader.atEnd()) + { + if(xmlReader.isStartElement()) + { if(xmlReader.name() == "DataBaseSettings") { - foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ + foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()) + { QString name = attr.name().toString(); QString value = attr.value().toString(); @@ -80,11 +101,8 @@ QString getLanguageFromSettings() } } } - xmlReader.readNext(); } - file.close(); - return ""; }