#include "mainwindow.h" #include "IStatusUpdate.h" #include "IVrBeltTearingConfig.h" #include "widgets/TearingDataTableWidget.h" #include "CrashHandler.h" #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { // 初始化崩溃处理程序 // CrashHandler::setDumpPath("c:/crash_dumps"); // CrashHandler::registerCrashHandler(); QApplication a(argc, argv); // Register meta types for signal-slot connections qRegisterMetaType>("QVector"); qRegisterMetaType>("QList"); qRegisterMetaType("QAbstractItemModel::LayoutChangeHint"); qRegisterMetaType("Qt::SortOrder"); // Register custom meta types for BeltTearing qRegisterMetaType("TearingData"); qRegisterMetaType("BeltTearingWorkStatus"); qRegisterMetaType("BeltTearingResult"); qRegisterMetaType("ServerInfo"); qRegisterMetaType("BeltTearingParam"); qRegisterMetaType("BeltTearingConfigResult"); qRegisterMetaType("NumericTableWidgetItem"); // 使用应用程序名称作为唯一标识符 const QString appKey = "BeltTearingApp_SingleInstance_Key"; // 创建系统信号量,用于同步访问共享内存 QSystemSemaphore semaphore(appKey + "_semaphore", 1); semaphore.acquire(); // 获取信号量 // 创建共享内存对象 QSharedMemory sharedMemory(appKey + "_memory"); bool isRunning = false; // 尝试附加到现有的共享内存 if (sharedMemory.attach()) { // 如果能够附加,说明已有实例在运行 isRunning = true; } else { // 尝试创建新的共享内存 if (!sharedMemory.create(1)) { // 创建失败,可能是因为已经存在 qDebug() << "Unable to create shared memory segment:" << sharedMemory.errorString(); isRunning = true; } } semaphore.release(); // 释放信号量 if (isRunning) { // 已有实例在运行,显示提示信息并退出 QMessageBox::information(nullptr, QObject::tr("应用程序已运行"), QObject::tr("撕裂应用程序已经在运行中,请勿重复启动!"), QMessageBox::Ok); return 0; } MainWindow w; w.show(); return a.exec(); }