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

284
10 февраля 2017, 04:20

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

Answer 1
Файл блокировки

Файл будет удалён автоматически
Каждый пользователь может запустить свою версию.

#include <QString>
#include <QLockFile>
#include <QDir>
#include <QMessageBox>
QString tmpDir = QDir::tempPath();
QLockFile lockFile(tmpDir + "/<unique identifier>.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("<unique identifier>", 1);
    sema.acquire();
#ifndef Q_OS_WIN32
    // в Unix разделяемая память не чистится при креше
    // Очищаем, если осталась от предыдущих запусков
    QSharedMemory nix_fix_shmem("<unique identifier 2>");
    if(nix_fix_shmem.attach()){
        nix_fix_shmem.detach();
    }
#endif
    QSharedMemory shmem("<unique identifier 2>");
    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;
    }
READ ALSO
Решение задачи оптимизации в рамках ООП

Решение задачи оптимизации в рамках ООП

Не могу правильно подобрать структуру классов и методов для решения задачи оптимизации именно в стиле ООПДано: функция с ограничениями (равенства...

318
Стиль/тема заголовка QDockWidget

Стиль/тема заголовка QDockWidget

Разбираюсь с QDockWidgetСтолкнулся с непонятной для меня вещью - под MS Windows заголовок окошка в доке отображается всегда одинаково, вне зависимости...

352
Сортировка строк и буква ё с++

Сортировка строк и буква ё с++

Нужно отсортировать слова, например: ёжик, Азбука, аромат, ЁжПроблема в том, что буква ё не сортируется

424