Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: core от Май 24, 2011, 19:42



Название: Запрет запуска двух екземпляров программы
Отправлено: core от Май 24, 2011, 19:42
Собственно, вопрос - как запретить запус второго екземляра бинарника - тоисть при повторном открытии показать какое-то сообщение что програма уже запущена, закрыть вторую програму и активировать текущее окно первой. В нете много написано про QtSingleApplication . В последней версии qt 4.7.2 такого класса нет.  Еще вспоминается вариант испольования pipes, но практики с такой штукой нет. Мб у кого-то есть рабочий пример реализации описанной выше задачи.


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: lit-uriy от Май 24, 2011, 19:51
>>В последней версии qt 4.7.2 такого класса нет.
Это из Qt Solutions (http://qt.gitorious.org/qt-solutions) - просто готовые решения от тролей, не входящие в Qt (когда-то они были платные :o)


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: twp от Май 24, 2011, 20:04
как вариант можно заюзать QSharedMemory


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: merke от Май 24, 2011, 20:14
с сокетами работал?


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: core от Май 24, 2011, 20:19
Код:
с сокетами работал?
не очень детально, но да. Мне б пример небольшой из рабочей реализации


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: merke от Май 24, 2011, 20:32
работа с пайпами в qt очень схожа с работой с сокетами


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: merke от Май 24, 2011, 20:33
смотри QLocalSoket


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: twp от Май 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


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: LisandreL от Май 24, 2011, 22:22
имхо намного проще использовать QSharedMemory для этих целей, например так
Но под Win из-под разных сессий пользователей на 1 компьютере 2 экземпляра запустить можно будет.


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: core от Май 25, 2011, 03:28
А как потом ету память освободить, а то после запуска программы с выделение памяти у меня на dropevent дебагер выдает  ошибку unavailable synchronous data


Название: Re: Запрет запуска двух екземпляров программы
Отправлено: lit-uriy от Май 25, 2011, 05:38
core,что ты изобретением велосипеда занимаешься. Я тебе уже дал ссылку.