#include "SingleInstanceManager.h" #include SingleInstanceManager::SingleInstanceManager(const QString& appKey) : m_appKey(appKey) , m_semaphore(nullptr) , m_sharedMemory(nullptr) , m_isRunning(false) { // 创建系统信号量,用于同步访问共享内存 m_semaphore = std::make_unique(appKey + "_semaphore", 1); m_semaphore->acquire(); // 获取信号量 // 创建共享内存对象 m_sharedMemory = std::make_unique(appKey + "_memory"); // 尝试附加到现有的共享内存 if (m_sharedMemory->attach()) { // 如果能够附加,说明已有实例在运行 m_isRunning = true; } else { // 尝试创建新的共享内存 if (!m_sharedMemory->create(1)) { // 创建失败,可能是因为已经存在 qDebug() << "Unable to create shared memory segment:" << m_sharedMemory->errorString(); m_isRunning = true; } else { // 成功创建,当前是唯一实例 m_isRunning = false; } } m_semaphore->release(); // 释放信号量 } SingleInstanceManager::~SingleInstanceManager() { release(); } bool SingleInstanceManager::isAnotherInstanceRunning() const { return m_isRunning; } void SingleInstanceManager::release() { if (m_sharedMemory) { m_sharedMemory->detach(); } }