Как сделать приложение одиночка средствами Qt5+ под Windows (xp, 7, 8, 10) ? Чтобы нельзя было запустить два экземпляра одновременно.
Ответ
Файл блокировки
Файл будет удалён автоматически
Каждый пользователь может запустить свою версию.
#include
QString tmpDir = QDir::tempPath();
QLockFile lockFile(tmpDir + "/
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("
#ifndef Q_OS_WIN32
// в Unix разделяемая память не чистится при креше
// Очищаем, если осталась от предыдущих запусков
QSharedMemory nix_fix_shmem("
QSharedMemory shmem("
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;
}
Комментариев нет:
Отправить комментарий