#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; }
Комментариев нет:
Отправить комментарий