Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Как сделать приложение одиночка?

#cpp #qt


Как сделать приложение одиночка средствами Qt5+ под Windows (xp, 7, 8, 10) ?
Чтобы нельзя было запустить два экземпляра одновременно.
    


Ответы

Ответ 1



Файл блокировки Файл будет удалён автоматически Каждый пользователь может запустить свою версию. #include #include #include #include QString tmpDir = QDir::tempPath(); QLockFile lockFile(tmpDir + "/.lock"); if(!lockFile.tryLock(100)){ QMessageBox msgBox; msgBox.setIcon(QMessageBox::Warning); msgBox.setText("You already have this app running." "\r\nOnly one instance is allowed."); msgBox.exec(); return 1; } Семафоры и разделяемая память Уникальный инстанс приложения на всю машину QSystemSemaphore sema("", 1); sema.acquire(); #ifndef Q_OS_WIN32 // в Unix разделяемая память не чистится при креше // Очищаем, если осталась от предыдущих запусков QSharedMemory nix_fix_shmem(""); if(nix_fix_shmem.attach()){ nix_fix_shmem.detach(); } #endif QSharedMemory shmem(""); bool is_running; if (shmem.attach()){ is_running = true; }else{ shmem.create(1); is_running = false; } sema.release(); if(is_running){ QMessageBox msgBox; msgBox.setIcon(QMessageBox::Warning); msgBox.setText("You already have this app running." "\r\nOnly one instance is allowed."); msgBox.exec(); return 1; }

Комментариев нет:

Отправить комментарий