Страницы

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

воскресенье, 21 октября 2018 г.

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

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


Ответ

Файл блокировки
Файл будет удалён автоматически Каждый пользователь может запустить свою версию.
#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." "
Only 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." "
Only one instance is allowed."); msgBox.exec(); return 1; }

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

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