#include "mainwindow.h" #include //#include #include #include "specialmessagebox.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); // Уникальное имя для идентификации процесса const QString sharedMemKey = "ServerMTD_sharedMemKey"; // Создание объекта общей памяти QSharedMemory sharedMemory(sharedMemKey); // Попытка прикрепления к существующему сегменту bool isRunningAlready = false; if (sharedMemory.attach(QSharedMemory::ReadWrite)) { qWarning() << "App ServerMTD is running already!"; QTranslator qtLanguageTranslator; qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", "."); qApp->installTranslator(&qtLanguageTranslator); //QMessageBox::critical(nullptr, QObject::tr("Error"), QObject::tr("App ServerMTD is running already!")); SpecMsgBox::CriticalClose(nullptr, QObject::tr("App ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!")); isRunningAlready = true; } else { // Приложения ещё нет, создаём сегмент памяти if (!sharedMemory.create(1)) { qCritical() << "Error create shared memory!"; return 1; } } if (isRunningAlready) return 1; // Освобождаем общую память при завершении работы приложения QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&]() { sharedMemory.detach(); }); MainWindow w; w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее! return a.exec(); }