Russian Qt Forum
Сентябрь 22, 2024, 11:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрет запуска двух екземпляров программы  (Прочитано 8624 раз)
core
Гость
« : Май 24, 2011, 19:42 »

Собственно, вопрос - как запретить запус второго екземляра бинарника - тоисть при повторном открытии показать какое-то сообщение что програма уже запущена, закрыть вторую програму и активировать текущее окно первой. В нете много написано про QtSingleApplication . В последней версии qt 4.7.2 такого класса нет.  Еще вспоминается вариант испольования pipes, но практики с такой штукой нет. Мб у кого-то есть рабочий пример реализации описанной выше задачи.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 24, 2011, 19:51 »

>>В последней версии qt 4.7.2 такого класса нет.
Это из Qt Solutions - просто готовые решения от тролей, не входящие в Qt (когда-то они были платные Шокированный)
Записан

Юра.
twp
Гость
« Ответ #2 : Май 24, 2011, 20:04 »

как вариант можно заюзать QSharedMemory
Записан
merke
Гость
« Ответ #3 : Май 24, 2011, 20:14 »

с сокетами работал?
Записан
core
Гость
« Ответ #4 : Май 24, 2011, 20:19 »

Код:
с сокетами работал?
не очень детально, но да. Мне б пример небольшой из рабочей реализации
Записан
merke
Гость
« Ответ #5 : Май 24, 2011, 20:32 »

работа с пайпами в qt очень схожа с работой с сокетами
Записан
merke
Гость
« Ответ #6 : Май 24, 2011, 20:33 »

смотри QLocalSoket
Записан
twp
Гость
« Ответ #7 : Май 24, 2011, 22:02 »

имхо намного проще использовать QSharedMemory для этих целей, например так:

Код:
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QSharedMemory global("your_unique_key");
     if (!global.create(1)) // если другой процесс уже создал разделяюмую память то выходим
          return 1;
     .....
     return app.exec();
 }

P.S. key лучше генерировать какой-нибудь тулзовиной для генерации UID
« Последнее редактирование: Май 24, 2011, 22:03 от twp » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #8 : Май 24, 2011, 22:22 »

имхо намного проще использовать QSharedMemory для этих целей, например так
Но под Win из-под разных сессий пользователей на 1 компьютере 2 экземпляра запустить можно будет.
Записан
core
Гость
« Ответ #9 : Май 25, 2011, 03:28 »

А как потом ету память освободить, а то после запуска программы с выделение памяти у меня на dropevent дебагер выдает  ошибку unavailable synchronous data
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Май 25, 2011, 05:38 »

core,что ты изобретением велосипеда занимаешься. Я тебе уже дал ссылку.
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.294 секунд. Запросов: 22.